Changeset 714 for codes/icosagcm/devel/src/dissip/dissip_gcm.f90
- Timestamp:
- 08/03/18 16:53:37 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/dissip/dissip_gcm.f90
r550 r714 35 35 !$OMP THREADPRIVATE(rayleigh_friction_type) 36 36 !$OMP THREADPRIVATE(rayleigh_shear) 37 REAL, SAVE :: rayleigh_tau 37 REAL, SAVE :: rayleigh_tau, rayleigh_limlat 38 38 !$OMP THREADPRIVATE(rayleigh_tau) 39 !$OMP THREADPRIVATE(rayleigh_limlat) 39 40 40 41 REAL,SAVE :: dtdissip … … 103 104 rayleigh_friction_type=2 104 105 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' 105 109 CASE DEFAULT 106 110 IF (is_master) PRINT *, 'Bad selector : rayleigh_friction_type =', TRIM(rayleigh_friction_key), & … … 117 121 STOP 118 122 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 119 128 END IF 120 129 … … 444 453 445 454 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 448 459 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" 450 461 itau_dissip=100000000 451 462 END IF 452 463 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 455 469 456 470 END SUBROUTINE init_dissip … … 479 493 480 494 INTEGER :: ind, shear 481 INTEGER :: l,ij 495 INTEGER :: l,ij,nn 482 496 483 497 !$OMP BARRIER … … 515 529 516 530 IF(rayleigh_friction_type>0) THEN 531 IF(rayleigh_friction_type<99) THEN 517 532 phi=f_geopot(ind) 518 533 ue=f_ue(ind) … … 524 539 ENDDO 525 540 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 526 559 END IF 527 560 END DO … … 529 562 CALL trace_end("dissip") 530 563 564 CALL write_dissip_tendencies 531 565 !$OMP BARRIER 532 566 533 567 CONTAINS 568 534 569 SUBROUTINE relax(shift_t, shift_u) 535 570 USE dcmip_initial_conditions_test_1_2_3 … … 559 594 END SUBROUTINE relax 560 595 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 561 612 END SUBROUTINE dissip 562 613
Note: See TracChangeset
for help on using the changeset viewer.