1module petscmpi 2 use, intrinsic :: ISO_C_binding 3#include <petscconf.h> 4#include "petsc/finclude/petscsys.h" 5#if defined(PETSC_HAVE_MPIUNI) 6 use mpiuni 7#else 8#if defined(PETSC_HAVE_MPI_FTN_MODULE) 9 use PETSC_MPI_FTN_MODULE 10#else 11#include "mpif.h" 12#endif 13#endif 14 15 MPIU_Datatype :: MPIU_REAL 16 MPIU_Datatype :: MPIU_SCALAR 17 MPIU_Datatype :: MPIU_INTEGER 18 MPIU_Op :: MPIU_SUM 19 20 MPIU_Comm:: PETSC_COMM_WORLD 21 MPIU_Comm:: PETSC_COMM_SELF 22 23#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 24!DEC$ ATTRIBUTES DLLEXPORT::MPIU_REAL 25!DEC$ ATTRIBUTES DLLEXPORT::MPIU_SUM 26!DEC$ ATTRIBUTES DLLEXPORT::MPIU_SCALAR 27!DEC$ ATTRIBUTES DLLEXPORT::MPIU_INTEGER 28!DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_SELF 29!DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_WORLD 30#endif 31end module petscmpi 32 33! ------------------------------------------------------------------------ 34module petscsysdef 35 use, intrinsic :: ISO_C_binding 36 use petscmpi 37 PetscReal, parameter :: PetscReal_Private = 1.0 38 integer, parameter :: PETSC_REAL_KIND = kind(PetscReal_Private) 39 40 PetscScalar, parameter :: PetscScalar_Private = (1.0, 0.0) 41 integer, parameter :: PETSC_SCALAR_KIND = kind(PetscScalar_Private) 42 43 PetscInt, parameter :: PetscInt_Private = 1 44 integer, parameter :: PETSC_INT_KIND = kind(PetscInt_Private) 45 46 PetscMPIInt, parameter :: PetscMPIInt_Private = 1 47 integer, parameter :: PETSC_MPIINT_KIND = kind(PetscMPIInt_Private) 48 49 PetscBool, parameter :: PETSC_TRUE = .true._C_BOOL 50 PetscBool, parameter :: PETSC_FALSE = .false._C_BOOL 51 52 PetscInt, parameter :: PETSC_DECIDE = -1 53 PetscInt, parameter :: PETSC_DECIDE_INTEGER = -1_PETSC_INT_KIND 54 PetscReal, parameter :: PETSC_DECIDE_REAL = -1.0_PETSC_REAL_KIND 55#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 56!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE 57!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE_INTEGER 58!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE_REAL 59#endif 60 61 PetscInt, parameter :: PETSC_DETERMINE = -1 62 PetscInt, parameter :: PETSC_DETERMINE_INTEGER = -1 63 PetscReal, parameter :: PETSC_DETERMINE_REAL = -1.0_PETSC_REAL_KIND 64#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 65!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE 66!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE_INTEGER 67!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE_REAL 68#endif 69 70 PetscInt, parameter :: PETSC_CURRENT = -2 71 PetscInt, parameter :: PETSC_CURRENT_INTEGER = -2 72 PetscReal, parameter :: PETSC_CURRENT_REAL = -2.0_PETSC_REAL_KIND 73#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 74!DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT 75!DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT_INTEGER 76!DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT_REAL 77#endif 78 79 PetscInt, parameter :: PETSC_DEFAULT = -2 80 PetscInt, parameter :: PETSC_DEFAULT_INTEGER = -2 81 PetscReal, parameter :: PETSC_DEFAULT_REAL = -2.0_PETSC_REAL_KIND 82#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 83!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT 84!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_INTEGER 85!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_REAL 86#endif 87 88 PetscFortranAddr, parameter :: PETSC_STDOUT = 0 89! 90! PETSc DataTypes 91! 92#if defined(PETSC_USE_REAL_SINGLE) 93#define PETSC_REAL PETSC_FLOAT 94#elif defined(PETSC_USE_REAL___FLOAT128) 95#define PETSC_REAL PETSC___FLOAT128 96#else 97#define PETSC_REAL PETSC_DOUBLE 98#endif 99#define PETSC_FORTRANADDR PETSC_LONG 100 101! PETSc mathematics include file. Defines certain basic mathematical 102! constants and functions for working with single and double precision 103! floating point numbers as well as complex and integers. 104! 105! Representation of complex i 106 PetscComplex, parameter :: PETSC_i = (0.0_PETSC_REAL_KIND, 1.0_PETSC_REAL_KIND) 107 108! A PETSC_NULL_FUNCTION pointer 109! 110 external PETSC_NULL_FUNCTION 111! 112! Possible arguments to PetscPushErrorHandler() 113! 114 external PETSCTRACEBACKERRORHANDLER 115 external PETSCABORTERRORHANDLER 116 external PETSCEMACSCLIENTERRORHANDLER 117 external PETSCATTACHDEBUGGERERRORHANDLER 118 external PETSCIGNOREERRORHANDLER 119! 120 external PetscIsInfOrNanScalar 121 external PetscIsInfOrNanReal 122 PetscBool PetscIsInfOrNanScalar 123 PetscBool PetscIsInfOrNanReal 124 125#include <../ftn/sys/petscall.h> 126 127 PetscViewer, parameter :: PETSC_VIEWER_STDOUT_SELF = tPetscViewer(9) 128 PetscViewer, parameter :: PETSC_VIEWER_DRAW_WORLD = tPetscViewer(4) 129 PetscViewer, parameter :: PETSC_VIEWER_DRAW_SELF = tPetscViewer(5) 130 PetscViewer, parameter :: PETSC_VIEWER_SOCKET_WORLD = tPetscViewer(6) 131 PetscViewer, parameter :: PETSC_VIEWER_SOCKET_SELF = tPetscViewer(7) 132 PetscViewer, parameter :: PETSC_VIEWER_STDOUT_WORLD = tPetscViewer(8) 133 PetscViewer, parameter :: PETSC_VIEWER_STDERR_WORLD = tPetscViewer(10) 134 PetscViewer, parameter :: PETSC_VIEWER_STDERR_SELF = tPetscViewer(11) 135 PetscViewer, parameter :: PETSC_VIEWER_BINARY_WORLD = tPetscViewer(12) 136 PetscViewer, parameter :: PETSC_VIEWER_BINARY_SELF = tPetscViewer(13) 137 PetscViewer, parameter :: PETSC_VIEWER_MATLAB_WORLD = tPetscViewer(14) 138 PetscViewer, parameter :: PETSC_VIEWER_MATLAB_SELF = tPetscViewer(15) 139 140 PetscViewer PETSC_VIEWER_STDOUT_ 141 PetscViewer PETSC_VIEWER_DRAW_ 142 external PETSC_VIEWER_STDOUT_ 143 external PETSC_VIEWER_DRAW_ 144 external PetscViewerAndFormatDestroy 145 146#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 147!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_SELF 148!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_WORLD 149!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_SELF 150!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_WORLD 151!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_SELF 152!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_WORLD 153!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_WORLD 154!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_SELF 155!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_WORLD 156!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_SELF 157!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_WORLD 158!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_SELF 159#endif 160 161 PetscErrorCode, parameter :: PETSC_ERR_MEM = 55 162 PetscErrorCode, parameter :: PETSC_ERR_SUP = 56 163 PetscErrorCode, parameter :: PETSC_ERR_SUP_SYS = 57 164 PetscErrorCode, parameter :: PETSC_ERR_ORDER = 58 165 PetscErrorCode, parameter :: PETSC_ERR_SIG = 59 166 PetscErrorCode, parameter :: PETSC_ERR_FP = 72 167 PetscErrorCode, parameter :: PETSC_ERR_COR = 74 168 PetscErrorCode, parameter :: PETSC_ERR_LIB = 76 169 PetscErrorCode, parameter :: PETSC_ERR_PLIB = 77 170 PetscErrorCode, parameter :: PETSC_ERR_MEMC = 78 171 PetscErrorCode, parameter :: PETSC_ERR_CONV_FAILED = 82 172 PetscErrorCode, parameter :: PETSC_ERR_USER = 83 173 PetscErrorCode, parameter :: PETSC_ERR_SYS = 88 174 PetscErrorCode, parameter :: PETSC_ERR_POINTER = 70 175 PetscErrorCode, parameter :: PETSC_ERR_MPI_LIB_INCOMP = 87 176 177 PetscErrorCode, parameter :: PETSC_ERR_ARG_SIZ = 60 178 PetscErrorCode, parameter :: PETSC_ERR_ARG_IDN = 61 179 PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONG = 62 180 PetscErrorCode, parameter :: PETSC_ERR_ARG_CORRUPT = 64 181 PetscErrorCode, parameter :: PETSC_ERR_ARG_OUTOFRANGE = 63 182 PetscErrorCode, parameter :: PETSC_ERR_ARG_BADPTR = 68 183 PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMETYPE = 69 184 PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMECOMM = 80 185 PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONGSTATE = 73 186 PetscErrorCode, parameter :: PETSC_ERR_ARG_TYPENOTSET = 89 187 PetscErrorCode, parameter :: PETSC_ERR_ARG_INCOMP = 75 188 PetscErrorCode, parameter :: PETSC_ERR_ARG_NULL = 85 189 PetscErrorCode, parameter :: PETSC_ERR_ARG_UNKNOWN_TYPE = 86 190 191 PetscErrorCode, parameter :: PETSC_ERR_FILE_OPEN = 65 192 PetscErrorCode, parameter :: PETSC_ERR_FILE_READ = 66 193 PetscErrorCode, parameter :: PETSC_ERR_FILE_WRITE = 67 194 PetscErrorCode, parameter :: PETSC_ERR_FILE_UNEXPECTED = 79 195 196 PetscErrorCode, parameter :: PETSC_ERR_MAT_LU_ZRPVT = 71 197 PetscErrorCode, parameter :: PETSC_ERR_MAT_CH_ZRPVT = 81 198 199 PetscErrorCode, parameter :: PETSC_ERR_INT_OVERFLOW = 84 200 201 PetscErrorCode, parameter :: PETSC_ERR_FLOP_COUNT = 90 202 PetscErrorCode, parameter :: PETSC_ERR_NOT_CONVERGED = 91 203 PetscErrorCode, parameter :: PETSC_ERR_MISSING_FACTOR = 92 204 PetscErrorCode, parameter :: PETSC_ERR_OPT_OVERWRITE = 93 205 PetscErrorCode, parameter :: PETSC_ERR_WRONG_MPI_SIZE = 94 206 PetscErrorCode, parameter :: PETSC_ERR_USER_INPUT = 95 207 PetscErrorCode, parameter :: PETSC_ERR_GPU_RESOURCE = 96 208 PetscErrorCode, parameter :: PETSC_ERR_GPU = 97 209 PetscErrorCode, parameter :: PETSC_ERR_MPI = 98 210 PetscErrorCode, parameter :: PETSC_ERR_RETURN = 99 211 212 character(len=80) :: PETSC_NULL_CHARACTER = '' 213 PetscInt PETSC_NULL_INTEGER, PETSC_NULL_INTEGER_ARRAY(1) 214 PetscInt, pointer :: PETSC_NULL_INTEGER_POINTER(:) 215 PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:) 216 PetscFortranDouble PETSC_NULL_DOUBLE 217 PetscScalar PETSC_NULL_SCALAR, PETSC_NULL_SCALAR_ARRAY(1) 218 PetscReal PETSC_NULL_REAL, PETSC_NULL_REAL_ARRAY(1) 219 PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:) 220 PetscBool PETSC_NULL_BOOL 221 PetscEnum PETSC_NULL_ENUM 222 MPIU_Comm PETSC_NULL_MPI_COMM 223! 224! Basic math constants 225! 226 PetscReal PETSC_PI 227 PetscReal PETSC_MAX_REAL 228 PetscReal PETSC_MIN_REAL 229 PetscReal PETSC_MACHINE_EPSILON 230 PetscReal PETSC_SQRT_MACHINE_EPSILON 231 PetscReal PETSC_SMALL 232 PetscReal PETSC_INFINITY 233 PetscReal PETSC_NINFINITY 234 235#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 236!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_CHARACTER 237!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER 238!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_ARRAY 239!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_POINTER 240!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_POINTER 241!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_POINTER 242!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_DOUBLE 243!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR 244!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_ARRAY 245!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL 246!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_ARRAY 247!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_BOOL 248!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_ENUM 249!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_MPI_COMM 250!DEC$ ATTRIBUTES DLLEXPORT::PETSC_PI 251!DEC$ ATTRIBUTES DLLEXPORT::PETSC_MAX_REAL 252!DEC$ ATTRIBUTES DLLEXPORT::PETSC_MIN_REAL 253!DEC$ ATTRIBUTES DLLEXPORT::PETSC_MACHINE_EPSILON 254!DEC$ ATTRIBUTES DLLEXPORT::PETSC_SQRT_MACHINE_EPSILON 255!DEC$ ATTRIBUTES DLLEXPORT::PETSC_SMALL 256!DEC$ ATTRIBUTES DLLEXPORT::PETSC_INFINITY 257!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NINFINITY 258#endif 259 260 type tPetscReal2d 261 sequence 262 PetscReal, dimension(:), pointer :: ptr 263 end type tPetscReal2D 264 265end module petscsysdef 266 267! ------------------------------------------------------------------------ 268 269module petscsys 270 use, intrinsic :: ISO_C_binding 271 use petscsysdef 272 273#include <../src/sys/ftn-mod/petscsys.h90> 274#include <../src/sys/ftn-mod/petscviewer.h90> 275#include <../ftn/sys/petscall.h90> 276 277 interface PetscInitialize 278 module procedure PetscInitializeWithHelp, PetscInitializeNoHelp, PetscInitializeNoArguments 279 end interface PetscInitialize 280 281 interface 282 subroutine PetscSetFortranBasePointers( & 283 PETSC_NULL_CHARACTER, & 284 PETSC_NULL_INTEGER, PETSC_NULL_SCALAR, & 285 PETSC_NULL_DOUBLE, PETSC_NULL_REAL, & 286 PETSC_NULL_BOOL, PETSC_NULL_ENUM, PETSC_NULL_FUNCTION, & 287 PETSC_NULL_MPI_COMM, & 288 PETSC_NULL_INTEGER_ARRAY, PETSC_NULL_SCALAR_ARRAY, & 289 PETSC_NULL_REAL_ARRAY, APETSC_NULL_INTEGER_POINTER, & 290 PETSC_NULL_SCALAR_POINTER, PETSC_NULL_REAL_POINTER) 291 use, intrinsic :: ISO_C_binding 292 use petscmpi 293 character(*) PETSC_NULL_CHARACTER 294 PetscInt PETSC_NULL_INTEGER 295 PetscScalar PETSC_NULL_SCALAR 296 PetscFortranDouble PETSC_NULL_DOUBLE 297 PetscReal PETSC_NULL_REAL 298 PetscBool PETSC_NULL_BOOL 299 PetscEnum PETSC_NULL_ENUM 300 external PETSC_NULL_FUNCTION 301 MPIU_Comm PETSC_NULL_MPI_COMM 302 PetscInt PETSC_NULL_INTEGER_ARRAY(*) 303 PetscScalar PETSC_NULL_SCALAR_ARRAY(*) 304 PetscReal PETSC_NULL_REAL_ARRAY(*) 305 PetscInt, pointer :: APETSC_NULL_INTEGER_POINTER(:) 306 PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:) 307 PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:) 308 end subroutine PetscSetFortranBasePointers 309 310 subroutine PetscOptionsString(string, text, man, default, value, flg, ierr) 311 use, intrinsic :: ISO_C_binding 312 character(*) string, text, man, default, value 313 PetscBool flg 314 PetscErrorCode ierr 315 end subroutine PetscOptionsString 316 end interface 317 318 interface petscbinaryread 319 subroutine petscbinaryreadcomplex(fd, data, num, count, type, z) 320 use, intrinsic :: ISO_C_binding 321 import ePetscDataType 322 integer4 fd 323 PetscComplex data(*) 324 PetscInt num 325 PetscInt count 326 PetscDataType type 327 PetscErrorCode z 328 end subroutine petscbinaryreadcomplex 329 subroutine petscbinaryreadreal(fd, data, num, count, type, z) 330 use, intrinsic :: ISO_C_binding 331 import ePetscDataType 332 integer4 fd 333 PetscReal data(*) 334 PetscInt num 335 PetscInt count 336 PetscDataType type 337 PetscErrorCode z 338 end subroutine petscbinaryreadreal 339 subroutine petscbinaryreadint(fd, data, num, count, type, z) 340 use, intrinsic :: ISO_C_binding 341 import ePetscDataType 342 integer4 fd 343 PetscInt data(*) 344 PetscInt num 345 PetscInt count 346 PetscDataType type 347 PetscErrorCode z 348 end subroutine petscbinaryreadint 349 subroutine petscbinaryreadcomplex1(fd, data, num, count, type, z) 350 use, intrinsic :: ISO_C_binding 351 import ePetscDataType 352 integer4 fd 353 PetscComplex data 354 PetscInt num 355 PetscInt count 356 PetscDataType type 357 PetscErrorCode z 358 end subroutine petscbinaryreadcomplex1 359 subroutine petscbinaryreadreal1(fd, data, num, count, type, z) 360 use, intrinsic :: ISO_C_binding 361 import ePetscDataType 362 integer4 fd 363 PetscReal data 364 PetscInt num 365 PetscInt count 366 PetscDataType type 367 PetscErrorCode z 368 end subroutine petscbinaryreadreal1 369 subroutine petscbinaryreadint1(fd, data, num, count, type, z) 370 use, intrinsic :: ISO_C_binding 371 import ePetscDataType 372 integer4 fd 373 PetscInt data 374 PetscInt num 375 PetscInt count 376 PetscDataType type 377 PetscErrorCode z 378 end subroutine petscbinaryreadint1 379 subroutine petscbinaryreadcomplexcnt(fd, data, num, count, type, z) 380 use, intrinsic :: ISO_C_binding 381 import ePetscDataType 382 integer4 fd 383 PetscComplex data(*) 384 PetscInt num 385 PetscInt count(1) 386 PetscDataType type 387 PetscErrorCode z 388 end subroutine petscbinaryreadcomplexcnt 389 subroutine petscbinaryreadrealcnt(fd, data, num, count, type, z) 390 use, intrinsic :: ISO_C_binding 391 import ePetscDataType 392 integer4 fd 393 PetscReal data(*) 394 PetscInt num 395 PetscInt count(1) 396 PetscDataType type 397 PetscErrorCode z 398 end subroutine petscbinaryreadrealcnt 399 subroutine petscbinaryreadintcnt(fd, data, num, count, type, z) 400 use, intrinsic :: ISO_C_binding 401 import ePetscDataType 402 integer4 fd 403 PetscInt data(*) 404 PetscInt num 405 PetscInt count(1) 406 PetscDataType type 407 PetscErrorCode z 408 end subroutine petscbinaryreadintcnt 409 subroutine petscbinaryreadcomplex1cnt(fd, data, num, count, type, z) 410 use, intrinsic :: ISO_C_binding 411 import ePetscDataType 412 integer4 fd 413 PetscComplex data 414 PetscInt num 415 PetscInt count(1) 416 PetscDataType type 417 PetscErrorCode z 418 end subroutine petscbinaryreadcomplex1cnt 419 subroutine petscbinaryreadreal1cnt(fd, data, num, count, type, z) 420 use, intrinsic :: ISO_C_binding 421 import ePetscDataType 422 integer4 fd 423 PetscReal data 424 PetscInt num 425 PetscInt count(1) 426 PetscDataType type 427 PetscErrorCode z 428 end subroutine petscbinaryreadreal1cnt 429 subroutine petscbinaryreadint1cnt(fd, data, num, count, type, z) 430 use, intrinsic :: ISO_C_binding 431 import ePetscDataType 432 integer4 fd 433 PetscInt data 434 PetscInt num 435 PetscInt count(1) 436 PetscDataType type 437 PetscErrorCode z 438 end subroutine petscbinaryreadint1cnt 439 end interface petscbinaryread 440 441 interface petscbinarywrite 442 subroutine petscbinarywritecomplex(fd, data, num, type, z) 443 use, intrinsic :: ISO_C_binding 444 import ePetscDataType 445 integer4 fd 446 PetscComplex data(*) 447 PetscInt num 448 PetscDataType type 449 PetscErrorCode z 450 end subroutine petscbinarywritecomplex 451 subroutine petscbinarywritereal(fd, data, num, type, z) 452 use, intrinsic :: ISO_C_binding 453 import ePetscDataType 454 integer4 fd 455 PetscReal data(*) 456 PetscInt num 457 PetscDataType type 458 PetscErrorCode z 459 end subroutine petscbinarywritereal 460 subroutine petscbinarywriteint(fd, data, num, type, z) 461 use, intrinsic :: ISO_C_binding 462 import ePetscDataType 463 integer4 fd 464 PetscInt data(*) 465 PetscInt num 466 PetscDataType type 467 PetscErrorCode z 468 end subroutine petscbinarywriteint 469 subroutine petscbinarywritecomplex1(fd, data, num, type, z) 470 use, intrinsic :: ISO_C_binding 471 import ePetscDataType 472 integer4 fd 473 PetscComplex data 474 PetscInt num 475 PetscDataType type 476 PetscErrorCode z 477 end subroutine petscbinarywritecomplex1 478 subroutine petscbinarywritereal1(fd, data, num, type, z) 479 use, intrinsic :: ISO_C_binding 480 import ePetscDataType 481 integer4 fd 482 PetscReal data 483 PetscInt num 484 PetscDataType type 485 PetscErrorCode z 486 end subroutine petscbinarywritereal1 487 subroutine petscbinarywriteint1(fd, data, num, type, z) 488 use, intrinsic :: ISO_C_binding 489 import ePetscDataType 490 integer4 fd 491 PetscInt data 492 PetscInt num 493 PetscDataType type 494 PetscErrorCode z 495 end subroutine petscbinarywriteint1 496 end interface petscbinarywrite 497 498contains 499#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 500!DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeWithHelp 501#endif 502 subroutine PetscInitializeWithHelp(filename, help, ierr) 503 character(len=*) :: filename 504 character(len=*) :: help 505 PetscErrorCode :: ierr 506 507 if (filename /= PETSC_NULL_CHARACTER) then 508 call PetscInitializeF(trim(filename), help, ierr) 509 CHKERRQ(ierr) 510 else 511 call PetscInitializeF(filename, help, ierr) 512 CHKERRQ(ierr) 513 end if 514 end subroutine PetscInitializeWithHelp 515 516#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 517!DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoHelp 518#endif 519 subroutine PetscInitializeNoHelp(filename, ierr) 520 character(len=*) :: filename 521 PetscErrorCode :: ierr 522 523 if (filename /= PETSC_NULL_CHARACTER) then 524 call PetscInitializeF(trim(filename), PETSC_NULL_CHARACTER, ierr) 525 CHKERRQ(ierr) 526 else 527 call PetscInitializeF(filename, PETSC_NULL_CHARACTER, ierr) 528 CHKERRQ(ierr) 529 end if 530 end subroutine PetscInitializeNoHelp 531 532#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 533!DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoArguments 534#endif 535 subroutine PetscInitializeNoArguments(ierr) 536 PetscErrorCode :: ierr 537 538 call PetscInitializeF(PETSC_NULL_CHARACTER, PETSC_NULL_CHARACTER, ierr) 539 CHKERRQ(ierr) 540 end subroutine PetscInitializeNoArguments 541 542#include <../ftn/sys/petscall.hf90> 543end module petscsys 544 545subroutine F90ArraySetRealPointer(array, sz, j, T) 546 use petscsysdef 547 PetscInt :: j, sz 548 PetscReal, target :: array(1:sz) 549 PetscReal2d, pointer :: T(:) 550 551 T(j + 1)%ptr => array 552end subroutine F90ArraySetRealPointer 553#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES) 554!DEC$ ATTRIBUTES DLLEXPORT:: F90ArraySetRealPointer 555#endif 556 557!------------------------------------------------------------------------ 558!TODO: generate the modules below by looping over 559! ftn/sys/XXX.h90 560! and skipping those in petscall.h 561 562module petscbag 563 use petscsys 564#include <../include/petsc/finclude/petscbag.h> 565#include <../ftn/sys/petscbag.h> 566#include <../ftn/sys/petscbag.h90> 567contains 568#include <../ftn/sys/petscbag.hf90> 569end module petscbag 570 571!------------------------------------------------------------------------ 572module petscbm 573 use petscsys 574#include <../include/petsc/finclude/petscbm.h> 575#include <../ftn/sys/petscbm.h> 576#include <../ftn/sys/petscbm.h90> 577contains 578 579#include <../ftn/sys/petscbm.hf90> 580end module petscbm 581 582!------------------------------------------------------------------------ 583module petscmatlab 584 use petscsys 585#include <../include/petsc/finclude/petscmatlab.h> 586#include <../ftn/sys/petscmatlab.h> 587#include <../ftn/sys/petscmatlab.h90> 588 589contains 590 591#include <../ftn/sys/petscmatlab.hf90> 592end module petscmatlab 593 594!------------------------------------------------------------------------ 595module petscdraw 596 use petscsys 597#include <../include/petsc/finclude/petscdraw.h> 598#include <../ftn/sys/petscdraw.h> 599#include <../ftn/sys/petscdraw.h90> 600 601 PetscEnum, parameter :: PETSC_DRAW_BASIC_COLORS = 33 602 PetscEnum, parameter :: PETSC_DRAW_ROTATE = -1 603 PetscEnum, parameter :: PETSC_DRAW_WHITE = 0 604 PetscEnum, parameter :: PETSC_DRAW_BLACK = 1 605 PetscEnum, parameter :: PETSC_DRAW_RED = 2 606 PetscEnum, parameter :: PETSC_DRAW_GREEN = 3 607 PetscEnum, parameter :: PETSC_DRAW_CYAN = 4 608 PetscEnum, parameter :: PETSC_DRAW_BLUE = 5 609 PetscEnum, parameter :: PETSC_DRAW_MAGENTA = 6 610 PetscEnum, parameter :: PETSC_DRAW_AQUAMARINE = 7 611 PetscEnum, parameter :: PETSC_DRAW_FORESTGREEN = 8 612 PetscEnum, parameter :: PETSC_DRAW_ORANGE = 9 613 PetscEnum, parameter :: PETSC_DRAW_VIOLET = 10 614 PetscEnum, parameter :: PETSC_DRAW_BROWN = 11 615 PetscEnum, parameter :: PETSC_DRAW_PINK = 12 616 PetscEnum, parameter :: PETSC_DRAW_CORAL = 13 617 PetscEnum, parameter :: PETSC_DRAW_GRAY = 14 618 PetscEnum, parameter :: PETSC_DRAW_YELLOW = 15 619 PetscEnum, parameter :: PETSC_DRAW_GOLD = 16 620 PetscEnum, parameter :: PETSC_DRAW_LIGHTPINK = 17 621 PetscEnum, parameter :: PETSC_DRAW_MEDIUMTURQUOISE = 18 622 PetscEnum, parameter :: PETSC_DRAW_KHAKI = 19 623 PetscEnum, parameter :: PETSC_DRAW_DIMGRAY = 20 624 PetscEnum, parameter :: PETSC_DRAW_YELLOWGREEN = 21 625 PetscEnum, parameter :: PETSC_DRAW_SKYBLUE = 22 626 PetscEnum, parameter :: PETSC_DRAW_DARKGREEN = 23 627 PetscEnum, parameter :: PETSC_DRAW_NAVYBLUE = 24 628 PetscEnum, parameter :: PETSC_DRAW_SANDYBROWN = 25 629 PetscEnum, parameter :: PETSC_DRAW_CADETBLUE = 26 630 PetscEnum, parameter :: PETSC_DRAW_POWDERBLUE = 27 631 PetscEnum, parameter :: PETSC_DRAW_DEEPPINK = 28 632 PetscEnum, parameter :: PETSC_DRAW_THISTLE = 29 633 PetscEnum, parameter :: PETSC_DRAW_LIMEGREEN = 30 634 PetscEnum, parameter :: PETSC_DRAW_LAVENDERBLUSH = 31 635 PetscEnum, parameter :: PETSC_DRAW_PLUM = 32 636 637contains 638 639#include <../ftn/sys/petscdraw.hf90> 640end module petscdraw 641 642!------------------------------------------------------------------------ 643subroutine PetscSetCOMM(c1, c2) 644 use, intrinsic :: ISO_C_binding 645 use petscmpi 646 647 implicit none 648 MPIU_Comm c1, c2 649 650 PETSC_COMM_WORLD = c1 651 PETSC_COMM_SELF = c2 652end 653 654subroutine PetscGetCOMM(c1) 655 use, intrinsic :: ISO_C_binding 656 use petscmpi 657 implicit none 658 MPIU_Comm c1 659 660 c1 = PETSC_COMM_WORLD 661end subroutine PetscGetCOMM 662 663subroutine PetscSetModuleBlock() 664 use, intrinsic :: ISO_C_binding 665 use petscsys!, only: PETSC_NULL_CHARACTER,PETSC_NULL_INTEGER,& 666 ! PETSC_NULL_SCALAR,PETSC_NULL_DOUBLE,PETSC_NULL_REAL,& 667 ! PETSC_NULL_BOOL,PETSC_NULL_FUNCTION,PETSC_NULL_MPI_COMM 668 implicit none 669 670 call PetscSetFortranBasePointers(PETSC_NULL_CHARACTER, & 671 PETSC_NULL_INTEGER, PETSC_NULL_SCALAR, & 672 PETSC_NULL_DOUBLE, PETSC_NULL_REAL, & 673 PETSC_NULL_BOOL, PETSC_NULL_ENUM, PETSC_NULL_FUNCTION, & 674 PETSC_NULL_MPI_COMM, & 675 PETSC_NULL_INTEGER_ARRAY, PETSC_NULL_SCALAR_ARRAY, & 676 PETSC_NULL_REAL_ARRAY, PETSC_NULL_INTEGER_POINTER, & 677 PETSC_NULL_SCALAR_POINTER, PETSC_NULL_REAL_POINTER) 678end subroutine PetscSetModuleBlock 679 680subroutine PetscSetModuleBlockMPI(freal, fscalar, fsum, finteger) 681 use, intrinsic :: ISO_C_binding 682 use petscmpi 683 implicit none 684 685 MPIU_Datatype freal, fscalar, finteger 686 MPIU_Op fsum 687 688 MPIU_REAL = freal 689 MPIU_SCALAR = fscalar 690 MPIU_SUM = fsum 691 MPIU_INTEGER = finteger 692end subroutine PetscSetModuleBlockMPI 693 694subroutine PetscSetModuleBlockNumeric(pi, maxreal, minreal, eps, seps, small, pinf, pninf) 695 use petscsys, only: PETSC_PI, PETSC_MAX_REAL, PETSC_MIN_REAL, & 696 PETSC_MACHINE_EPSILON, PETSC_SQRT_MACHINE_EPSILON, & 697 PETSC_SMALL, PETSC_INFINITY, PETSC_NINFINITY 698 use, intrinsic :: ISO_C_binding 699 implicit none 700 701 PetscReal pi, maxreal, minreal, eps, seps 702 PetscReal small, pinf, pninf 703 704 PETSC_PI = pi 705 PETSC_MAX_REAL = maxreal 706 PETSC_MIN_REAL = minreal 707 PETSC_MACHINE_EPSILON = eps 708 PETSC_SQRT_MACHINE_EPSILON = seps 709 PETSC_SMALL = small 710 PETSC_INFINITY = pinf 711 PETSC_NINFINITY = pninf 712end subroutine PetscSetModuleBlockNumeric 713