Changeset 387


Ignore:
Timestamp:
05/28/16 00:32:21 (8 years ago)
Author:
dubos
Message:

Infrastructure for multiple dynamical tracers - tested with JW06 and moist baroclinic wave

Location:
codes/icosagcm/trunk/src
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/caldyn_gcm.f90

    r362 r387  
    133133     
    134134    REAL(rstd),POINTER :: ps(:), dps(:) 
    135     REAL(rstd),POINTER :: mass(:,:), theta_rhodz(:,:), dtheta_rhodz(:,:) 
     135    REAL(rstd),POINTER :: mass(:,:), theta_rhodz(:,:,:), dtheta_rhodz(:,:,:) 
    136136    REAL(rstd),POINTER :: u(:,:), du(:,:), hflux(:,:), wflux(:,:) 
    137137    REAL(rstd),POINTER :: qu(:,:) 
     
    194194          qu=f_qu(ind) 
    195195          qv=f_qv(ind) 
    196           CALL compute_pvort(ps,u,theta_rhodz, mass,theta,qu,qv) ! COM00 COM01 COM02 
     196          CALL compute_pvort(ps,u,theta_rhodz(:,:,1), mass,theta,qu,qv) ! COM00 COM01 COM02 
    197197       ENDDO 
    198198!       CALL checksum(f_mass) 
     
    208208          ps=f_ps(ind) 
    209209          u=f_u(ind) 
    210           theta_rhodz=f_theta_rhodz(ind) 
    211210          mass=f_mass(ind) 
    212211          theta = f_theta(ind) 
     
    219218          dtheta_rhodz=f_dtheta_rhodz(ind) 
    220219          du=f_du(ind) 
    221           CALL compute_caldyn_horiz(u,mass,qu,theta,pk,geopot, hflux,convm,dtheta_rhodz,du) 
     220          CALL compute_caldyn_horiz(u,mass,qu,theta,pk,geopot, hflux,convm,dtheta_rhodz(:,:,1),du) 
    222221          IF(caldyn_eta==eta_mass) THEN 
    223222             wflux=f_wflux(ind) 
    224223             wwuu=f_wwuu(ind) 
    225224             dps=f_dps(ind) 
    226              CALL compute_caldyn_vert(u,theta,mass,convm, wflux,wwuu, dps, dtheta_rhodz, du) 
     225             CALL compute_caldyn_vert(u,theta,mass,convm, wflux,wwuu, dps, dtheta_rhodz(:,:,1), du) 
    227226          END IF 
    228227       ENDDO        
     
    245244          qu=f_qu(ind) 
    246245          qv=f_qv(ind) 
    247           CALL compute_pvort(ps,u,theta_rhodz, mass,theta,qu,qv) 
     246          CALL compute_pvort(ps,u,theta_rhodz(:,:,1), mass,theta,qu,qv) 
    248247          pk = f_pk(ind) 
    249248          geopot = f_geopot(ind)   
     
    253252          dtheta_rhodz=f_dtheta_rhodz(ind) 
    254253          du=f_du(ind) 
    255           CALL compute_caldyn_horiz(u,mass,qu,theta,pk,geopot, hflux,convm,dtheta_rhodz,du) 
     254          CALL compute_caldyn_horiz(u,mass,qu,theta,pk,geopot, hflux,convm,dtheta_rhodz(:,:,1),du) 
    256255          IF(caldyn_eta==eta_mass) THEN 
    257256             wflux=f_wflux(ind) 
  • codes/icosagcm/trunk/src/caldyn_hevi.f90

    r377 r387  
    4949     
    5050    REAL(rstd),POINTER :: ps(:), dps(:) 
    51     REAL(rstd),POINTER :: mass(:,:), theta_rhodz(:,:), dtheta_rhodz(:,:) 
     51    REAL(rstd),POINTER :: mass(:,:), theta_rhodz(:,:,:), dtheta_rhodz(:,:,:) 
    5252    REAL(rstd),POINTER :: du(:,:), dW(:,:), dPhi(:,:), hflux(:,:), wflux(:,:) 
    5353    REAL(rstd),POINTER :: u(:,:), w(:,:), qu(:,:), qv(:,:) 
     
    107107       mass=f_mass(ind) 
    108108       theta = f_theta(ind) 
    109        CALL compute_theta(ps,theta_rhodz, mass,theta) 
     109       CALL compute_theta(ps,theta_rhodz(:,:,1), mass,theta) 
    110110       pk = f_pk(ind) 
    111111       geopot = f_geopot(ind) 
     
    163163          CALL compute_caldyn_slow_NH(u,mass,geopot,W, hflux,du,dPhi,dW) 
    164164       END IF 
    165        CALL compute_caldyn_Coriolis(hflux,theta,qu, convm,dtheta_rhodz,du) 
     165       CALL compute_caldyn_Coriolis(hflux,theta,qu, convm,dtheta_rhodz(:,:,1),du) 
    166166       IF(caldyn_eta==eta_mass) THEN 
    167167          wflux=f_wflux(ind) 
  • codes/icosagcm/trunk/src/check_conserve.f90

    r365 r387  
    256256    REAL(rstd), POINTER :: ue(:,:) 
    257257    REAL(rstd), POINTER :: p(:,:)  
    258     REAL(rstd), POINTER :: theta_rhodz(:,:)  
     258    REAL(rstd), POINTER :: theta_rhodz(:,:,:)  
    259259    REAL(rstd), POINTER :: pk(:,:)  
    260260    REAL(rstd), POINTER :: phis(:)  
     
    275275      pk=f_pk(ind)  
    276276      phis=f_phis(ind)  
    277       CALL compute_energy(ind,ue,p,rhodz,theta_rhodz,pk,phis, & 
     277      CALL compute_energy(ind,ue,p,rhodz,theta_rhodz(:,:,1),pk,phis, & 
    278278           e, s, AAM_mass, AAM_vel, rmsv) 
    279279    END DO  
  • codes/icosagcm/trunk/src/dissip_gcm.f90

    r360 r387  
    241241    IF (is_master) PRINT *, 'mean T-cell edge size (km)', 1.45*radius/iim_glo/1000., & 
    242242                              'effective T-cell half-edge size (km)', dumax**(-.5/nitergdiv)/1000 
    243     IF (is_master)  PRINT *, 'Max. time step assuming c=340 m/s and Courant number=4 :', & 
    244                                4./340.*dumax**(-.5/nitergdiv) 
     243    IF (is_master)  PRINT *, 'Max. time step assuming c=340 m/s and Courant number=3 (ARK2.3) :', & 
     244                               3./340.*dumax**(-.5/nitergdiv) 
    245245 
    246246    cgraddiv=dumax**(-1./nitergdiv) 
     
    469469    REAL(rstd),POINTER         :: due_diss1(:,:) 
    470470    REAL(rstd),POINTER         :: due_diss2(:,:) 
    471     REAL(rstd),POINTER         :: dtheta_rhodz(:,:) 
     471    REAL(rstd),POINTER         :: dtheta_rhodz(:,:,:) 
    472472    REAL(rstd),POINTER         :: dtheta_rhodz_diss(:,:) 
    473473 
     
    508508            due(ij+u_ldown,l) = -0.5*( due_diss1(ij+u_ldown,l)/tau_graddiv(l) + due_diss2(ij+u_ldown,l)/tau_gradrot(l))*itau_dissip 
    509509 
    510             dtheta_rhodz(ij,l) = -0.5*dtheta_rhodz_diss(ij,l)/tau_divgrad(l)*itau_dissip 
     510            dtheta_rhodz(ij,l,1) = -0.5*dtheta_rhodz_diss(ij,l)/tau_divgrad(l)*itau_dissip 
    511511        ENDDO 
    512512      ENDDO 
     
    715715     
    716716    REAL(rstd),POINTER :: mass(:,:) 
    717     REAL(rstd),POINTER :: theta_rhodz(:,:) 
     717    REAL(rstd),POINTER :: theta_rhodz(:,:,:) 
    718718    REAL(rstd),POINTER :: dtheta_rhodz(:,:) 
    719719 
     
    733733!$SIMD 
    734734        DO ij=ij_begin,ij_end 
    735             dtheta_rhodz(ij,l) = theta_rhodz(ij,l) / mass(ij,l) 
     735            dtheta_rhodz(ij,l) = theta_rhodz(ij,l,1) / mass(ij,l) 
    736736        ENDDO 
    737737      ENDDO 
  • codes/icosagcm/trunk/src/etat0.f90

    r382 r387  
    137137    REAL(rstd),POINTER :: mass(:,:) 
    138138    REAL(rstd),POINTER :: phis(:) 
    139     REAL(rstd),POINTER :: theta_rhodz(:,:) 
     139    REAL(rstd),POINTER :: theta_rhodz(:,:,:) 
    140140    REAL(rstd),POINTER :: temp(:,:) 
    141141    REAL(rstd),POINTER :: u(:,:) 
     
    162162 
    163163      IF( TRIM(etat0_type)=='williamson91.6' ) THEN 
    164        CALL compute_etat0_collocated(ps,mass, phis, theta_rhodz, u, geopot, W, q) 
     164         CALL compute_etat0_collocated(ps,mass, phis, theta_rhodz(:,:,1), u, geopot, W, q) 
    165165      ELSE 
    166        CALL compute_etat0_collocated(ps,mass, phis, temp, u, geopot, W, q) 
     166         CALL compute_etat0_collocated(ps,mass, phis, temp, u, geopot, W, q) 
    167167      ENDIF 
    168168    ENDDO 
  • codes/icosagcm/trunk/src/euler_scheme.f90

    r366 r387  
    3333    REAL(rstd),POINTER :: u(:,:) , du(:,:) 
    3434    REAL(rstd),POINTER :: mass(:,:), dmass(:,:) 
    35     REAL(rstd),POINTER :: theta_rhodz(:,:), dtheta_rhodz(:,:) 
     35    REAL(rstd),POINTER :: theta_rhodz(:,:,:), dtheta_rhodz(:,:,:) 
    3636    REAL(rstd),POINTER :: hflux(:,:),wflux(:,:),hfluxt(:,:),wfluxt(:,:) 
    3737    INTEGER :: ind 
     
    7777             u(ij+u_lup,l)=u(ij+u_lup,l)+dt*du(ij+u_lup,l) 
    7878             u(ij+u_ldown,l)=u(ij+u_ldown,l)+dt*du(ij+u_ldown,l) 
    79              theta_rhodz(ij,l)=theta_rhodz(ij,l)+dt*dtheta_rhodz(ij,l) 
     79             theta_rhodz(ij,l,1)=theta_rhodz(ij,l,1)+dt*dtheta_rhodz(ij,l,1) 
    8080          ENDDO 
    8181       ENDDO 
  • codes/icosagcm/trunk/src/grid_param.f90

    r280 r387  
    44  INTEGER,PARAMETER  :: nb_face=10 
    55  INTEGER  :: llm=19 
    6   INTEGER  :: nqtot 
     6  INTEGER  :: nqtot ! number of tracers handled by advection scheme 
     7  INTEGER  :: nqdyn ! number of dynamical tracers : 1 if dry, more if moist 
    78 
    89CONTAINS 
  • codes/icosagcm/trunk/src/hevi_scheme.f90

    r371 r387  
    8080             CALL update_2D(bjl(l,j), f_ps, f_dps_slow(:,l)) 
    8181          ELSE 
    82              CALL update(bjl(l,j), f_mass, f_dmass_slow(:,l)) 
     82             CALL update_3D(bjl(l,j), f_mass, f_dmass_slow(:,l)) 
    8383          END IF 
    84           CALL update(bjl(l,j), f_theta_rhodz, f_dtheta_rhodz_slow(:,l)) 
    85           CALL update(bjl(l,j), f_u, f_du_slow(:,l)) 
    86           CALL update(cjl(l,j), f_u, f_du_fast(:,l)) 
     84          CALL update_4D(bjl(l,j), f_theta_rhodz, f_dtheta_rhodz_slow(:,l)) 
     85          CALL update_3D(bjl(l,j), f_u, f_du_slow(:,l)) 
     86          CALL update_3D(cjl(l,j), f_u, f_du_fast(:,l)) 
    8787          IF(.NOT. hydrostatic) THEN 
    88              CALL update(bjl(l,j), f_W, f_dW_slow(:,l)) 
    89              CALL update(cjl(l,j), f_W, f_dW_fast(:,l)) 
    90              CALL update(bjl(l,j), f_geopot, f_dPhi_slow(:,l)) 
    91              CALL update(cjl(l,j), f_geopot, f_dPhi_fast(:,l)) 
     88             CALL update_3D(bjl(l,j), f_W, f_dW_slow(:,l)) 
     89             CALL update_3D(cjl(l,j), f_W, f_dW_fast(:,l)) 
     90             CALL update_3D(bjl(l,j), f_geopot, f_dPhi_slow(:,l)) 
     91             CALL update_3D(cjl(l,j), f_geopot, f_dPhi_fast(:,l)) 
    9292          END IF 
    9393       END DO 
     
    9696  END SUBROUTINE HEVI_scheme 
    9797   
    98   SUBROUTINE update(w, f_y, f_dy) 
     98  SUBROUTINE update_4D(w, f_y, f_dy) 
     99    USE dimensions 
     100    USE grid_param, ONLY : nqdyn 
     101    REAL(rstd) :: w 
     102    TYPE(t_field) :: f_y(:), f_dy(:) 
     103    REAL(rstd), POINTER :: y(:,:,:), dy(:,:,:) 
     104    INTEGER :: ind, iq 
     105    IF(w /= 0.) THEN 
     106       DO ind=1,ndomain 
     107          IF (.NOT. assigned_domain(ind)) CYCLE 
     108          CALL swap_dimensions(ind) 
     109          dy=f_dy(ind); y=f_y(ind) 
     110          DO iq=1,nqdyn 
     111             CALL compute_update_3D(w,y(:,:,iq),dy(:,:,iq)) 
     112          END DO 
     113       ENDDO 
     114    END IF 
     115  END SUBROUTINE update_4D 
     116     
     117  SUBROUTINE update_3D(w, f_y, f_dy) 
    99118    USE dimensions 
    100119    REAL(rstd) :: w 
     
    107126          CALL swap_dimensions(ind) 
    108127          dy=f_dy(ind); y=f_y(ind) 
    109           CALL compute_update(w,y,dy) 
     128          CALL compute_update_3D(w,y,dy) 
    110129       ENDDO 
    111130    END IF 
    112   END SUBROUTINE update 
     131  END SUBROUTINE update_3D 
    113132     
    114   SUBROUTINE compute_update(w, y, dy) 
     133  SUBROUTINE compute_update_3D(w, y, dy) 
    115134    USE omp_para 
    116135    USE disvert_mod 
     
    123142       y(:,l)=y(:,l)+w*dy(:,l) 
    124143    ENDDO 
    125   END SUBROUTINE compute_update 
     144  END SUBROUTINE compute_update_3D 
    126145   
    127146  SUBROUTINE update_2D(w, f_y, f_dy) 
  • codes/icosagcm/trunk/src/observable.f90

    r377 r387  
    214214    TYPE(t_field), POINTER :: f_ps(:), f_phis(:), f_theta_rhodz(:), &  ! IN 
    215215         f_pks(:), f_p(:), f_theta(:), f_pk(:), f_phi(:)               ! OUT 
    216     REAL(rstd),POINTER :: pk(:,:), p(:,:), theta(:,:), theta_rhodz(:,:), & 
     216    REAL(rstd),POINTER :: pk(:,:), p(:,:), theta(:,:), theta_rhodz(:,:,:), & 
    217217         phi(:,:), phis(:), ps(:), pks(:) 
    218218    INTEGER :: ind 
     
    233233       theta_rhodz = f_theta_rhodz(ind) 
    234234       theta = f_theta(ind) 
    235        CALL compute_theta_rhodz2theta(ps, theta_rhodz,theta,0) 
     235       CALL compute_theta_rhodz2theta(ps, theta_rhodz(:,:,1),theta,0) 
    236236       phis = f_phis(ind) 
    237237       phi = f_phi(ind) 
  • codes/icosagcm/trunk/src/physics.f90

    r381 r387  
    9494    TYPE(t_field),POINTER :: f_wflux(:) 
    9595    TYPE(t_field),POINTER :: f_q(:) 
    96     REAL(rstd),POINTER :: phis(:) 
    97     REAL(rstd),POINTER :: ps(:) 
    98     REAL(rstd),POINTER :: theta_rhodz(:,:) 
    99     REAL(rstd),POINTER :: ue(:,:) 
    100     REAL(rstd),POINTER :: q(:,:,:) 
    10196 
    10297    LOGICAL:: firstcall,lastcall 
     
    153148    REAL(rstd),POINTER :: ps(:) 
    154149    REAL(rstd),POINTER :: temp(:,:) 
    155     REAL(rstd),POINTER :: theta_rhodz(:,:) 
    156150    REAL(rstd),POINTER :: ue(:,:) 
    157151    REAL(rstd),POINTER :: dulon(:,:) 
  • codes/icosagcm/trunk/src/theta_rhodz.f90

    r323 r387  
    5858   
    5959    REAL(rstd), POINTER :: ps(:) 
    60     REAL(rstd), POINTER :: theta_rhodz(:,:) 
     60    REAL(rstd), POINTER :: theta_rhodz(:,:,:) 
    6161    REAL(rstd), POINTER :: temp(:,:) 
    6262    REAL(rstd), POINTER :: p(:,:) 
     
    8181      CALL compute_exner(ps,p,pks,pk,0) 
    8282!$OMP BARRIER 
    83       CALL compute_theta_rhodz2temperature(p, pk, theta_rhodz,temp,0) 
     83      CALL compute_theta_rhodz2temperature(p, pk, theta_rhodz(:,:,1),temp,0) 
    8484    ENDDO 
    8585!$OMP BARRIER 
     
    9797   
    9898    REAL(rstd), POINTER :: ps(:) 
    99     REAL(rstd), POINTER :: theta_rhodz(:,:) 
     99    REAL(rstd), POINTER :: theta_rhodz(:,:,:) 
    100100    REAL(rstd), POINTER :: temp(:,:) 
    101101    REAL(rstd), POINTER :: p(:,:) 
     
    120120      CALL compute_exner(ps,p,pks,pk,0) 
    121121!$OMP BARRIER 
    122       CALL compute_temperature2theta_rhodz(p, pk, temp, theta_rhodz, 0) 
     122      CALL compute_temperature2theta_rhodz(p, pk, temp, theta_rhodz(:,:,1), 0) 
    123123    ENDDO 
    124124!$OMP BARRIER 
  • codes/icosagcm/trunk/src/timeloop_gcm.f90

    r377 r387  
    4141       STOP 
    4242    END IF 
     43 
     44    nqdyn = 1 ! one dynamical tracer = theta for the moment 
    4345 
    4446    def='ARK2.3' 
     
    8789    CALL allocate_field(f_mass,field_t,type_real,llm,name='mass') 
    8890    CALL allocate_field(f_rhodz,field_t,type_real,llm,name='rhodz') 
    89     CALL allocate_field(f_theta_rhodz,field_t,type_real,llm,name='theta_rhodz') 
     91    CALL allocate_field(f_theta_rhodz,field_t,type_real,llm,nqdyn,name='theta_rhodz') 
    9092    CALL allocate_field(f_u,field_u,type_real,llm,name='u') 
    9193    CALL allocate_field(f_geopot,field_t,type_real,llm+1,name='geopot') 
     
    103105       CALL allocate_field(f_dps,field_t,type_real,name='dps') 
    104106       CALL allocate_field(f_dmass,field_t,type_real,llm, name='dmass') 
    105        CALL allocate_field(f_dtheta_rhodz,field_t,type_real,llm,name='dtheta_rhodz') 
     107       CALL allocate_field(f_dtheta_rhodz,field_t,type_real,llm,nqdyn,name='dtheta_rhodz') 
    106108       CALL allocate_field(f_du,field_u,type_real,llm,name='du') 
    107109       ! Model state at previous time step (RK/MLF) 
    108110       CALL allocate_field(f_psm1,field_t,type_real,name='psm1') 
    109111       CALL allocate_field(f_massm1,field_t,type_real,llm, name='massm1') 
    110        CALL allocate_field(f_theta_rhodzm1,field_t,type_real,llm,name='theta_rhodzm1') 
     112       CALL allocate_field(f_theta_rhodzm1,field_t,type_real,llm,nqdyn,name='theta_rhodzm1') 
    111113       CALL allocate_field(f_um1,field_u,type_real,llm,name='um1') 
    112114    CASE(hevi) 
     
    114116       CALL allocate_fields(nb_stage,f_dps_slow, field_t,type_real,name='dps_slow') 
    115117       CALL allocate_fields(nb_stage,f_dmass_slow, field_t,type_real,llm, name='dmass_slow') 
    116        CALL allocate_fields(nb_stage,f_dtheta_rhodz_slow, field_t,type_real,llm,name='dtheta_rhodz_fast') 
     118       CALL allocate_fields(nb_stage,f_dtheta_rhodz_slow, field_t,type_real,llm,nqdyn,name='dtheta_rhodz_fast') 
    117119       CALL allocate_fields(nb_stage,f_du_slow, field_u,type_real,llm,name='du_slow') 
    118120       CALL allocate_fields(nb_stage,f_du_fast, field_u,type_real,llm,name='du_fast') 
     
    131133       CALL allocate_field(f_psm2,field_t,type_real) 
    132134       CALL allocate_field(f_massm2,field_t,type_real,llm) 
    133        CALL allocate_field(f_theta_rhodzm2,field_t,type_real,llm) 
     135       CALL allocate_field(f_theta_rhodzm2,field_t,type_real,llm,nqdyn) 
    134136       CALL allocate_field(f_um2,field_u,type_real,llm) 
    135137    END SELECT 
     
    208210    fluxt_zero=.TRUE. 
    209211 
    210     IF(positive_theta) CALL copy_theta_to_q1(f_theta_rhodz,f_rhodz,f_q) 
     212    IF(positive_theta) CALL copy_theta_to_q(f_theta_rhodz,f_rhodz,f_q) 
    211213 
    212214    !$OMP MASTER 
     
    303305             END DO 
    304306          ENDIF 
    305           IF(positive_theta) CALL copy_q1_to_theta(f_theta_rhodz,f_rhodz,f_q) 
     307          IF(positive_theta) CALL copy_q_to_theta(f_theta_rhodz,f_rhodz,f_q) 
    306308       END IF 
    307309        
     
    360362  END SUBROUTINE print_iteration 
    361363 
    362   SUBROUTINE copy_theta_to_q1(f_theta_rhodz,f_rhodz,f_q) 
     364  SUBROUTINE copy_theta_to_q(f_theta_rhodz,f_rhodz,f_q) 
    363365    TYPE(t_field),POINTER :: f_theta_rhodz(:),f_rhodz(:), f_q(:) 
    364     REAL(rstd), POINTER :: theta_rhodz(:,:), rhodz(:,:), q(:,:,:) 
    365     INTEGER :: ind 
     366    REAL(rstd), POINTER :: theta_rhodz(:,:,:), rhodz(:,:), q(:,:,:) 
     367    INTEGER :: ind, iq 
    366368    DO ind=1, ndomain 
    367369       IF (.NOT. assigned_domain(ind)) CYCLE 
     
    371373       rhodz=f_rhodz(ind) 
    372374       q=f_q(ind) 
    373        q(:,:,1)  = theta_rhodz(:,:)/rhodz(:,:) 
     375       DO iq=1, nqdyn 
     376          q(:,:,iq)  = theta_rhodz(:,:,iq)/rhodz(:,:) 
     377       END DO 
    374378    END DO 
    375   END SUBROUTINE copy_theta_to_q1 
    376  
    377   SUBROUTINE copy_q1_to_theta(f_theta_rhodz,f_rhodz,f_q) 
     379  END SUBROUTINE copy_theta_to_q 
     380 
     381  SUBROUTINE copy_q_to_theta(f_theta_rhodz,f_rhodz,f_q) 
    378382    TYPE(t_field),POINTER :: f_theta_rhodz(:),f_rhodz(:), f_q(:) 
    379     REAL(rstd), POINTER :: theta_rhodz(:,:), rhodz(:,:), q(:,:,:) 
    380     INTEGER :: ind 
     383    REAL(rstd), POINTER :: theta_rhodz(:,:,:), rhodz(:,:), q(:,:,:) 
     384    INTEGER :: ind, iq 
    381385    DO ind=1, ndomain 
    382386       IF (.NOT. assigned_domain(ind)) CYCLE 
     
    386390       rhodz=f_rhodz(ind) 
    387391       q=f_q(ind) 
    388        theta_rhodz(:,:) = rhodz(:,:)*q(:,:,1) 
     392       DO iq=1,nqdyn 
     393          theta_rhodz(:,:,iq) = rhodz(:,:)*q(:,:,iq) 
     394       END DO 
    389395    END DO 
    390   END SUBROUTINE copy_q1_to_theta 
     396  END SUBROUTINE copy_q_to_theta 
    391397 
    392398END MODULE timeloop_gcm_mod 
Note: See TracChangeset for help on using the changeset viewer.