Provides conversion utilities from mqc_config_t to driver-compatible structures Minimal config for driver Convert log level string to integer Check for overlapping fragments (for testing)
Runtime configuration for driver (internal use only)
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| type(aimd_keywords_t), | public | :: | aimd |
AIMD calculation keywords |
|||
| logical, | public | :: | allow_overlapping_fragments | = | .false. |
Enable GMBE for overlapping fragments |
|
| integer(kind=int32), | public | :: | calc_type |
Calculation type constant |
|||
| real(kind=dp), | public, | allocatable | :: | fragment_cutoffs(:) |
Distance cutoffs for n-mer screening (Angstrom) |
||
| type(hessian_keywords_t), | public | :: | hessian |
Hessian calculation keywords |
|||
| integer, | public | :: | max_intersection_level | = | 999 |
Maximum k-way intersection depth for GMBE (default: no limit) |
|
| type(method_config_t), | public | :: | method_config |
Complete method configuration |
|||
| integer, | public | :: | nlevel | = | 0 |
Fragmentation level (0 = unfragmented) |
|
| type(scf_keywords_t), | public | :: | scf |
SCF calculation keywords |
|||
| logical, | public | :: | skip_json_output | = | .false. |
Skip JSON output for large calculations |
Convert string log level to integer value This function uses the pic_logger constants
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | level_string |
Check if any atoms appear in multiple fragments This is O(nfrag * natoms_per_frag^2) which is acceptable for typical fragment sizes
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(input_fragment_t), | intent(in) | :: | fragments(:) | |||
| integer, | intent(in) | :: | nfrag | |||
| type(error_t), | intent(out) | :: | error |
Convert mqc_config_t to minimal driver_config_t Extracts only the fields needed by the driver If molecule_index is provided, uses that molecule’s fragment count
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mqc_config_t), | intent(in) | :: | mqc_config | |||
| type(driver_config_t), | intent(out) | :: | driver_config | |||
| integer, | intent(in), | optional | :: | molecule_index |
Which molecule to use (for multi-molecule mode) |
Convert mqc_config_t geometry to system_geometry_t For unfragmented calculations (nfrag=0), treats entire system as single unit For fragmented calculations, currently assumes monomer-based fragmentation If molecule_index is provided, uses that specific molecule from multi-molecule mode
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mqc_config_t), | intent(in) | :: | mqc_config | |||
| type(system_geometry_t), | intent(out) | :: | sys_geom | |||
| type(error_t), | intent(out) | :: | error | |||
| integer, | intent(in), | optional | :: | molecule_index |
Which molecule to use (for multi-molecule mode) |
Convert geometry to system_geometry_t for fragmented calculation Supports both identical and variable-sized fragments
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mqc_config_t), | intent(in) | :: | mqc_config | |||
| type(system_geometry_t), | intent(out) | :: | sys_geom | |||
| logical, | intent(in) | :: | use_angstrom | |||
| type(error_t), | intent(out) | :: | error |
Convert geometry to system_geometry_t for unfragmented calculation Treats entire system as a single monomer
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(geometry_type), | intent(in) | :: | geom | |||
| type(system_geometry_t), | intent(out) | :: | sys_geom | |||
| logical, | intent(in) | :: | use_angstrom |
Shared helper to initialize system_geometry_t for fragmented calculations Handles fragment allocation, size checking, and overlap validation
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | nfrag | |||
| type(geometry_type), | intent(in) | :: | geom | |||
| type(input_fragment_t), | intent(in) | :: | fragments(:) | |||
| integer, | intent(in) | :: | charge | |||
| integer, | intent(in) | :: | multiplicity | |||
| logical, | intent(in) | :: | allow_overlapping | |||
| logical, | intent(in) | :: | use_angstrom | |||
| type(system_geometry_t), | intent(out) | :: | sys_geom | |||
| type(error_t), | intent(out) | :: | error |
Convert a molecule_t to system_geometry_t Handles both unfragmented (nfrag=0) and fragmented molecules
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(molecule_t), | intent(in) | :: | mol | |||
| type(system_geometry_t), | intent(out) | :: | sys_geom | |||
| logical, | intent(in) | :: | use_angstrom | |||
| logical, | intent(in) | :: | allow_overlapping | |||
| type(error_t), | intent(out) | :: | error |