Changeset 950


Ignore:
Timestamp:
07/14/19 14:40:34 (5 years ago)
Author:
dubos
Message:

devel/unstructured : towards Fortran driver for DYNAMICO-unstructured

Location:
codes/icosagcm/devel/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/base/field.f90

    r883 r950  
    365365    field_pt=>field%rval2d 
    366366    IF(grid_type == grid_unst) THEN 
    367        PRINT *, 'getval_r2d for ' // TRIM(field%name) // ' : ', SHAPE(field_pt) 
     367!       PRINT *, 'getval_r2d for ' // TRIM(field%name) // ' : ', SHAPE(field_pt) 
    368368    END IF 
    369369  END SUBROUTINE  getval_r2d 
     
    381381    field_pt=>field%rval3d 
    382382    IF(grid_type == grid_unst) THEN 
    383        PRINT *, 'getval_r3d for ' // TRIM(field%name) // ' : ', SHAPE(field_pt) 
     383!       PRINT *, 'getval_r3d for ' // TRIM(field%name) // ' : ', SHAPE(field_pt) 
    384384    END IF 
    385385  END SUBROUTINE  getval_r3d 
     
    396396    field_pt=>field%rval4d 
    397397    IF(grid_type == grid_unst) THEN 
    398        PRINT *, 'getval_r4d for ' // TRIM(field%name) // ' : ', SHAPE(field_pt) 
     398!       PRINT *, 'getval_r4d for ' // TRIM(field%name) // ' : ', SHAPE(field_pt) 
    399399    END IF 
    400400  END SUBROUTINE  getval_r4d   
  • codes/icosagcm/devel/src/dissip/dissip_gcm.f90

    r925 r950  
    127127       CALL dissip_profile 
    128128       CALL dissip_timescale 
     129    ELSE ! FIXME unstructured 
     130       itau_dissip=1000000000 
    129131    END IF 
    130132 
  • codes/icosagcm/devel/src/time/euler_scheme.f90

    r885 r950  
    1515       f_dW_slow(:,:), f_dW_fast(:,:)                                 ! vertical momentum tendencies (NH) 
    1616 
    17   INTEGER, PARAMETER, PUBLIC :: explicit=1, hevi=2, euler=1, rk4=2, mlf=3, rk25=4, ark23=6, ark33=7 
     17  INTEGER, PARAMETER, PUBLIC :: explicit=1, hevi=2, euler=1, rk4=2, mlf=3, rk25=4, ark23=6, ark33=7, ark11=8 
    1818 
    1919  INTEGER,SAVE, PUBLIC :: nb_stage, matsuno_period, scheme, scheme_family 
     
    160160       IF(caldyn_eta==eta_mass .AND. is_omp_first_level) THEN ! update ps 
    161161          ps=f_ps(ind) 
    162           ps(:)=(ps(:)-ptop)/g 
     162          ps(:)=(ps(:)-ptop)/g ! FIXME : OpenMP+unstructured 
    163163       END IF 
    164164 
     
    175175          ENDDO 
    176176       CASE(grid_unst) 
    177           PRINT *, 'legacy_to_DEC', llm, edge_num, SHAPE(u), SHAPE(de) ! FIXME 
     177!          PRINT *, 'legacy_to_DEC', llm, edge_num, SHAPE(u), SHAPE(de) ! FIXME 
    178178          DO ij=1, edge_num 
    179179             DO l=1,llm 
     
    206206       IF(caldyn_eta==eta_mass .AND. is_omp_first_level) THEN 
    207207          ps=f_ps(ind) 
    208           !DIR$ SIMD 
    209           DO ij=ij_begin,ij_end 
    210              ps(ij)=ptop+ps(ij)*g ! convert column-integrated mass to ps 
    211           ENDDO 
     208          ps(:) = ptop + ps(:)*g ! FIXME : OpenMP+unstructured 
    212209       ENDIF 
    213210        
    214211       u=f_u(ind) 
    215        DO l=ll_begin,ll_end 
    216           !DIR$ SIMD 
    217           DO ij=ij_begin,ij_end 
    218              u(ij+u_right,l)=u(ij+u_right,l)/de(ij+u_right) 
    219              u(ij+u_lup,l)=u(ij+u_lup,l)/de(ij+u_lup) 
    220              u(ij+u_ldown,l)=u(ij+u_ldown,l)/de(ij+u_ldown) 
    221           ENDDO 
    222        ENDDO 
     212       SELECT CASE(grid_type) 
     213       CASE(grid_ico) 
     214          DO l=ll_begin,ll_end 
     215             !DIR$ SIMD 
     216             DO ij=ij_begin,ij_end 
     217                u(ij+u_right,l)=u(ij+u_right,l)/de(ij+u_right) 
     218                u(ij+u_lup,l)=u(ij+u_lup,l)/de(ij+u_lup) 
     219                u(ij+u_ldown,l)=u(ij+u_ldown,l)/de(ij+u_ldown) 
     220             ENDDO 
     221          ENDDO 
     222       CASE(grid_unst) 
     223!          PRINT *, 'DEC_to_legacy', llm, edge_num, SHAPE(u), SHAPE(de) ! FIXME 
     224          DO ij=1, edge_num 
     225             DO l=1,llm 
     226                u(l,ij) = u(l,ij)/de(ij) 
     227             END DO 
     228          END DO 
     229       CASE DEFAULT 
     230          STOP 'Unsupported grid_type encountered in legacy_to_DEC' 
     231       END SELECT 
    223232    ENDDO 
    224233 
  • codes/icosagcm/devel/src/time/hevi_scheme.f90

    r732 r950  
    1111  REAL(rstd), PARAMETER, DIMENSION(3) :: zero = (/0.,0.,0./) 
    1212 
    13   PUBLIC :: set_coefs_ark23, set_coefs_ark33, hevi_scheme 
     13  PUBLIC :: set_coefs_ark23, set_coefs_ark33, set_coefs_ark11, hevi_scheme 
    1414 
    1515CONTAINS 
     
    3434  END SUBROUTINE set_coefs_ark33 
    3535     
     36  SUBROUTINE set_coefs_ark11(dt) 
     37    ! Euler scheme disguised as ARK for development purposes 
     38    REAL(rstd) :: dt 
     39    CALL set_coefs_rk(dt, (/ zero, (/1.,0.,0./), (/0.,0.,0./), (/0./0.,0./0.,0./) /) ) 
     40  END SUBROUTINE set_coefs_ark11 
     41     
    3642  SUBROUTINE set_coefs_rk(dt, ajl) 
    3743    REAL(rstd) :: dt, ajl(3,4) 
     
    4248    REAL(rstd) :: dt, ajl_slow(3,4), ajl_fast(3,4) ! fast/slow Butcher tableaus 
    4349    INTEGER :: j 
    44     DO j=1,3 
     50    DO j=1,nb_stage 
    4551       bjl(:,j) = dt*(ajl_slow(:,j+1)-ajl_slow(:,j)) 
    4652       cjl(:,j) = dt*(ajl_fast(:,j+1)-ajl_fast(:,j)) 
    4753       taujj(j) = dt*ajl_fast(j,j) 
    4854    END DO 
    49     wj=dt*ajl_slow(:,4) 
     55    wj=dt*ajl_slow(:,nb_stage+1) 
    5056  END SUBROUTINE set_coefs_hevi 
    5157 
     
    142148    INTENT(INOUT) :: y 
    143149    INTENT(IN) :: dy 
    144     INTEGER :: l 
    145     DO l=ll_begin,ll_end 
     150    INTEGER :: l, l_begin, l_end 
     151    IF(grid_type==grid_ico) THEN 
     152       l_begin = ll_begin 
     153       l_end   = l_end 
     154    ELSE ! unstructured : FIXME OpenMP 
     155       l_begin = 1 
     156       l_end   = SIZE(y,2) 
     157    END IF 
     158    DO l=l_begin,l_end 
    146159       y(:,l)=y(:,l)+w*dy(:,l) 
    147160    ENDDO 
     
    157170       IF (.NOT. assigned_domain(ind)) CYCLE 
    158171       dy=f_dy(ind); y=f_y(ind) 
    159        IF (is_omp_level_master) CALL compute_update_2D(w,y,dy) 
     172       IF (is_omp_level_master) CALL compute_update_2D(w,y,dy) ! FIXME OpenMP+unstructured 
    160173    ENDDO 
    161174  END SUBROUTINE update_2D 
  • codes/icosagcm/devel/src/time/timeloop_gcm.f90

    r949 r950  
    7878       CALL getin('matsuno_period',matsuno_period) 
    7979       nb_stage=matsuno_period+1 
     80    CASE('ARK1.1') 
     81       scheme_family=hevi 
     82       scheme=ark11 
     83       nb_stage=1 
     84       CALL set_coefs_ark11(dt) 
    8085    CASE('ARK2.3') 
    8186       scheme_family=hevi 
     
    9196       nb_stage=0 
    9297    CASE default 
    93        PRINT*,'Bad selector for variable scheme : <', TRIM(def),            & 
    94             ' > options are <euler>, <runge_kutta>, <leapfrog_matsuno>,<RK2.5>,<ARK2.3>' 
     98       PRINT*,'Bad selector for variable scheme : <' // TRIM(def) // '>, ', & 
     99            'options are <euler>, <runge_kutta>, <leapfrog_matsuno>, <RK2.5>,<ARK2.3>, ,<ARK1.1>' 
    95100       STOP 
    96101    END SELECT 
Note: See TracChangeset for help on using the changeset viewer.