|
3 | 3 | !! |
4 | 4 | !! The driver contains the sediment driver module |
5 | 5 | ! This computer program is part of MOSSCO. |
6 | | -!> @copyright Copyright (C) 2021-2024 Helmholtz-Zentrum hereon GmbH |
| 6 | +!> @copyright Copyright (C) 2021-2025 Helmholtz-Zentrum hereon GmbH |
7 | 7 | !> @copyright Copyright (C) 2013-2021 Helmholtz-Zentrum Geesthacht |
8 | 8 | !> @author Carsten Lemmen <carsten.lemmen@hereon.de> |
9 | 9 | !> @author Richard Hofmeister |
@@ -48,8 +48,8 @@ module fabm_sediment_driver |
48 | 48 | integer :: knum,inum=-1,jnum=-1 |
49 | 49 | real(rk) :: dzmin |
50 | 50 | logical :: use_ugrid=.false. |
51 | | - logical, dimension(:,:,:), pointer :: mask => null() |
52 | | - logical, dimension(:,:), pointer :: mask_hz => null() |
| 51 | + integer, dimension(:,:,:), pointer :: mask => null() |
| 52 | + integer, dimension(:,:), pointer :: mask_hz => null() |
53 | 53 | integer :: type=LOCAL_GRID |
54 | 54 | contains |
55 | 55 | procedure :: init_grid |
@@ -249,11 +249,11 @@ subroutine initialize(sed, unit) |
249 | 249 |
|
250 | 250 | if (.not.associated(sed%mask)) then |
251 | 251 | allocate(sed%mask(sed%grid%inum,sed%grid%jnum,sed%grid%knum)) |
252 | | - sed%mask = .false. |
| 252 | + sed%mask = 0 |
253 | 253 | end if |
254 | 254 | if (.not.associated(sed%grid%mask_hz)) then |
255 | 255 | allocate(sed%grid%mask_hz(sed%grid%inum,sed%grid%jnum)) |
256 | | - sed%grid%mask_hz = .false. |
| 256 | + sed%grid%mask_hz = 0 |
257 | 257 | end if |
258 | 258 | ! add mask to grid |
259 | 259 | sed%grid%mask => sed%mask |
@@ -428,7 +428,7 @@ subroutine update_porosity(sed, from_surface, reinitialize_concentrations) |
428 | 428 | end if |
429 | 429 |
|
430 | 430 | ! set porosity to 1.0 in the mask to avoid overflows in get_rhs |
431 | | -where(sed%mask) sed%porosity = 1.0d0 |
| 431 | +where(sed%mask > 0) sed%porosity = 1.0d0 |
432 | 432 |
|
433 | 433 | ! update interface porosity |
434 | 434 | sed%intf_porosity(:,:,1) = sed%porosity(:,:,1) |
@@ -461,7 +461,7 @@ subroutine init_concentrations(sed) |
461 | 461 | do j=1,sed%jnum |
462 | 462 | do i=1,sed%inum |
463 | 463 | !> @todo: check adaptive solver for -1.d20 or other negative missing values |
464 | | - if (sed%mask(i,j,k)) sed%conc(i,j,k,:)=sed%missing_value |
| 464 | + if (sed%mask(i,j,k) > 0) sed%conc(i,j,k,:)=sed%missing_value |
465 | 465 | end do |
466 | 466 | end do |
467 | 467 | end do |
@@ -500,45 +500,45 @@ subroutine fabm_sed_check_domain(sed, rc) |
500 | 500 | write(0,*) 'shape(cond)=',shape(sed%conc),' shape(mask)=', shape(sed%mask) |
501 | 501 | #endif |
502 | 502 |
|
503 | | - if (any(.not.sed%mask.and.sed%porosity<=0)) then |
| 503 | + if (any(.not.(sed%mask > 0).and.sed%porosity<=0)) then |
504 | 504 | write(0,*) 'FATAL sediment porosity <=0 ' |
505 | 505 | stop |
506 | 506 | endif |
507 | 507 |
|
508 | | - if (any(.not.sed%mask.and.sed%porosity > 1)) then |
| 508 | + if (any(.not.(sed%mask > 0).and.sed%porosity > 1)) then |
509 | 509 | write(0,*) 'FATAL sediment porosity > 1 ' |
510 | 510 | stop |
511 | 511 | endif |
512 | 512 |
|
513 | | - if (any(.not.sed%mask(:,:,1:sed%knum-1).and..not.sed%mask(:,:,2:sed%knum) & |
| 513 | + if (any(.not.(sed%mask(:,:,1:sed%knum-1) > 0).and..not.(sed%mask(:,:,2:sed%knum) > 0) & |
514 | 514 | .and.sed%grid%dzc <= 0)) then |
515 | 515 | write(0,*) 'FATAL sediment central layer difference <= 0 ' |
516 | 516 | do k=1,sed%knum-1; do j=1,sed%jnum; do i=1,sed%inum |
517 | | - if (.not.sed%mask(i,j,k).and..not.sed%mask(i,j,k+1).and.sed%grid%dzc(i,j,k) <= 0) & |
| 517 | + if (.not.(sed%mask(i,j,k)> 0).and..not.(sed%mask(i,j,k+1)>0).and.sed%grid%dzc(i,j,k) <= 0) & |
518 | 518 | write(0,*) 'dz(i,j,k) ',i,j,k, sed%grid%dzc(i,j,k) |
519 | 519 | enddo; enddo; enddo |
520 | 520 | stop |
521 | 521 | endif |
522 | 522 |
|
523 | | - if (any(.not.sed%mask.and.sed%grid%dz < sed%grid%dzmin)) then |
| 523 | + if (any(.not.(sed%mask>0).and.sed%grid%dz < sed%grid%dzmin)) then |
524 | 524 | write(0,*) 'FATAL sediment layer height < minimum value ', sed%grid%dzmin |
525 | 525 | do k=1,sed%knum; do j=1,sed%jnum; do i=1,sed%inum |
526 | | - if (.not.sed%mask(i,j,k).and.sed%grid%dz(i,j,k) < sed%grid%dzmin) & |
| 526 | + if (.not.(sed%mask(i,j,k)>0).and.sed%grid%dz(i,j,k) < sed%grid%dzmin) & |
527 | 527 | write(0,*) 'dz(i,j,k) ',i,j,k, sed%grid%dz(i,j,k) |
528 | 528 | enddo; enddo; enddo |
529 | 529 | stop |
530 | 530 | endif |
531 | 531 |
|
532 | 532 | if (associated(sed%conc)) then |
533 | 533 | do k=1,sed%knum; do j=1,sed%jnum; do i=1,sed%inum |
534 | | - if (sed%mask(i,j,k)) then |
| 534 | + if (sed%mask(i,j,k)>0) then |
535 | 535 | sed%conc(i,j,k,:)=1.d20 |
536 | 536 | endif |
537 | 537 | enddo; enddo; enddo |
538 | 538 | end if |
539 | 539 |
|
540 | 540 | ! set porosity to 1.0 in the mask to avoid overflows in get_rhs |
541 | | - where(sed%mask) sed%porosity = 1.0d0 |
| 541 | + where(sed%mask > 0) sed%porosity = 1.0d0 |
542 | 542 |
|
543 | 543 | if (present(rc)) rc=rc_ |
544 | 544 |
|
@@ -598,7 +598,7 @@ subroutine get_rhs(rhs_driver, rhs) |
598 | 598 | endif |
599 | 599 | !write(0,*) shape(rhs_driver%mask(:,:,k)), shape(rhs_driver%temp3d(:,:,k)) |
600 | 600 | !write(0,*) shape(rhs_driver%bdys(:,:,1)), shape(rhs_driver%par(:,:,k)) |
601 | | - where (.not.rhs_driver%mask(:,:,k)) |
| 601 | + where (.not.rhs_driver%mask(:,:,k) > 0) |
602 | 602 | rhs_driver%temp3d(:,:,k) = rhs_driver%bdys(:,:,1) |
603 | 603 | rhs_driver%par(:,:,k) = rhs_driver%par_surface * exp(-cumdepth/rhs_driver%k_par) |
604 | 604 | end where |
@@ -700,7 +700,7 @@ subroutine get_rhs(rhs_driver, rhs) |
700 | 700 | call fabm_do(rhs_driver%model,1,rhs_driver%inum,j,k,rhs(:,j,k,:)) |
701 | 701 |
|
702 | 702 | do i=1,rhs_driver%inum |
703 | | - if (.not.rhs_driver%mask(i,j,k)) then |
| 703 | + if (.not.rhs_driver%mask(i,j,k) > 0) then |
704 | 704 | !call fabm_do(rhs_driver%model,i,j,k,rhs(i,j,k,:)) |
705 | 705 | else |
706 | 706 | ! set transport to 0.0 - evtl. skip calculation of transport completely |
@@ -772,7 +772,7 @@ subroutine diff3d (grid, C, Cup, Cdown, fluxup, fluxdown, & |
772 | 772 | ! positive flux is directed downward |
773 | 773 | do j=1,grid%jnum |
774 | 774 | do i=1,grid%inum |
775 | | - if (.not.grid%mask(i,j,1)) then |
| 775 | + if (.not.grid%mask(i,j,1) > 0) then |
776 | 776 | do k = 2,grid%knum |
777 | 777 | Flux(i,j,k) = -D(i,j,k) * (C(i,j,k)-C(i,j,k-1)) /grid%dzc(i,j,k-1) |
778 | 778 | end do |
|
0 commit comments