Ignore:
Timestamp:
08/03/18 16:53:37 (6 years ago)
Author:
dubos
Message:

devel : backported from trunk commits r607,r648,r649,r667,r668,r669,r706

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/dissip/dissip_gcm.f90

    r550 r714  
    3535!$OMP THREADPRIVATE(rayleigh_friction_type) 
    3636!$OMP THREADPRIVATE(rayleigh_shear) 
    37   REAL, SAVE    :: rayleigh_tau 
     37  REAL, SAVE    :: rayleigh_tau, rayleigh_limlat 
    3838!$OMP THREADPRIVATE(rayleigh_tau) 
     39!$OMP THREADPRIVATE(rayleigh_limlat) 
    3940   
    4041  REAL,SAVE    :: dtdissip 
     
    103104      rayleigh_friction_type=2 
    104105      IF (is_master) PRINT *, 'Rayleigh friction : Schaer-like mountain with shear DCMIP2.2' 
     106   CASE('giant_liu_schneider')  
     107      rayleigh_friction_type=99 
     108      IF (is_master) PRINT *, 'Rayleigh friction : giant planets Liu Schneider 2010' 
    105109   CASE DEFAULT 
    106110      IF (is_master) PRINT *, 'Bad selector : rayleigh_friction_type =', TRIM(rayleigh_friction_key), & 
     
    117121         STOP 
    118122      END IF 
     123      IF(rayleigh_friction_type == 99) THEN 
     124         rayleigh_limlat=0. 
     125         CALL getin("rayleigh_limlat",rayleigh_limlat) 
     126         rayleigh_limlat = rayleigh_limlat*3.14159/180. 
     127      ENDIF 
    119128   END IF 
    120129 
     
    444453 
    445454    IF(mintau>0) THEN 
    446        itau_dissip=INT(mintau/dt) 
    447        dtdissip=itau_dissip*dt 
     455       IF (itau_dissip==0) THEN 
     456         IF (is_master) PRINT *,"init_dissip: Automatic computation of itau_dissip..." 
     457         itau_dissip=INT(mintau/dt) 
     458       ENDIF 
    448459    ELSE 
    449        IF (is_master) PRINT *,"No dissipation time set, setting itau_dissip to 1000000000" 
     460       IF (is_master) PRINT *,"init_dissip: No dissipation time set, setting itau_dissip to 1000000000" 
    450461       itau_dissip=100000000 
    451462    END IF 
    452463    itau_dissip=MAX(1,itau_dissip) 
    453     IF (is_master) PRINT *,"rayleigh_tau",rayleigh_tau, "mintau ",mintau, & 
    454          "itau_dissip",itau_dissip," dtdissip ",dtdissip 
     464    dtdissip=itau_dissip*dt 
     465    IF (is_master) THEN 
     466      PRINT *,"init_dissip: rayleigh_tau",rayleigh_tau, "mintau ",mintau 
     467      PRINT *,"init_dissip: itau_dissip",itau_dissip," dtdissip ",dtdissip 
     468    ENDIF 
    455469 
    456470  END SUBROUTINE init_dissip  
     
    479493 
    480494    INTEGER :: ind, shear 
    481     INTEGER :: l,ij 
     495    INTEGER :: l,ij,nn 
    482496 
    483497!$OMP BARRIER 
     
    515529 
    516530      IF(rayleigh_friction_type>0) THEN 
     531       IF(rayleigh_friction_type<99) THEN 
    517532         phi=f_geopot(ind) 
    518533         ue=f_ue(ind) 
     
    524539            ENDDO 
    525540         END DO 
     541       ELSE 
     542         ue=f_ue(ind) 
     543            DO ij=ij_begin,ij_end 
     544              nn = ij+u_right 
     545              IF (ABS(lat_e(nn)) .gt. rayleigh_limlat) THEN 
     546                !print*, "latitude", lat_e(nn)*180./3.14159 
     547                due(nn,ll_begin:ll_begin+1) = due(nn,ll_begin:ll_begin+1) - (ue(nn,ll_begin:ll_begin+1)/rayleigh_tau) 
     548              ENDIF 
     549              nn = ij+u_lup 
     550              IF (ABS(lat_e(nn)) .gt. rayleigh_limlat) THEN 
     551                due(nn,ll_begin:ll_begin+1) = due(nn,ll_begin:ll_begin+1) - (ue(nn,ll_begin:ll_begin+1)/rayleigh_tau) 
     552              ENDIF 
     553              nn = ij+u_ldown 
     554              IF (ABS(lat_e(nn)) .gt. rayleigh_limlat) THEN 
     555                due(nn,ll_begin:ll_begin+1) = due(nn,ll_begin:ll_begin+1) - (ue(nn,ll_begin:ll_begin+1)/rayleigh_tau) 
     556              ENDIF 
     557            ENDDO 
     558       ENDIF 
    526559      END IF 
    527560   END DO 
     
    529562   CALL trace_end("dissip") 
    530563 
     564   CALL write_dissip_tendencies 
    531565!$OMP BARRIER 
    532566 
    533567    CONTAINS 
     568 
    534569      SUBROUTINE relax(shift_t, shift_u) 
    535570        USE dcmip_initial_conditions_test_1_2_3 
     
    559594       END SUBROUTINE relax 
    560595       
     596       SUBROUTINE write_dissip_tendencies 
     597         USE observable_mod, ONLY : f_buf_ulon, f_buf_ulat 
     598         USE wind_mod 
     599         USE output_field_mod 
     600 
     601         CALL transfert_request(f_due_diss1,req_e1_vect) 
     602         CALL un2ulonlat(f_due_diss1, f_buf_ulon, f_buf_ulat, (1./(tau_graddiv(1)))) 
     603         CALL output_field("dulon_diss1",f_buf_ulon) 
     604         CALL output_field("dulat_diss1",f_buf_ulat) 
     605! 
     606         CALL transfert_request(f_due_diss2,req_e1_vect) 
     607         CALL un2ulonlat(f_due_diss2, f_buf_ulon, f_buf_ulat, (1./(tau_graddiv(1)))) 
     608         CALL output_field("dulon_diss2",f_buf_ulon) 
     609         CALL output_field("dulat_diss2",f_buf_ulat) 
     610       END SUBROUTINE write_dissip_tendencies 
     611 
    561612  END SUBROUTINE dissip 
    562613 
Note: See TracChangeset for help on using the changeset viewer.