{"id":303761,"name":"ThermoPack","description":"A thermodynamic model library for fluid properties and pressure-volume-temperature property calculations.","url":"https://github.com/thermotools/thermopack","last_synced_at":"2026-04-13T11:00:55.004Z","repository":{"id":63029557,"uuid":"503707872","full_name":"thermotools/thermopack","owner":"thermotools","description":"Thermopack is a thermodynamic model library for fluid properties and PVT calculations","archived":false,"fork":false,"pushed_at":"2026-02-26T18:05:50.000Z","size":199647,"stargazers_count":100,"open_issues_count":3,"forks_count":26,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-04-11T10:03:04.373Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Fortran","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thermotools.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-06-15T09:54:53.000Z","updated_at":"2026-04-10T13:57:00.000Z","dependencies_parsed_at":"2023-10-16T18:18:00.255Z","dependency_job_id":"b9ba2d34-97ea-4e51-9b8c-bf96cc35a811","html_url":"https://github.com/thermotools/thermopack","commit_stats":{"total_commits":512,"total_committers":19,"mean_commits":26.94736842105263,"dds":0.607421875,"last_synced_commit":"7ca7bce00d33ef14e90333cfac96e539ab6b1b45"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/thermotools/thermopack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thermotools","download_url":"https://codeload.github.com/thermotools/thermopack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31749763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T09:16:15.125Z","status":"ssl_error","status_checked_at":"2026-04-13T09:16:05.023Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"thermotools","name":"thermotools","uuid":"103247158","kind":"organization","description":null,"email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/103247158?v=4","repositories_count":2,"last_synced_at":"2023-05-10T12:17:12.683Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/thermotools","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-05-10T12:17:12.701Z","updated_at":"2023-05-10T12:17:12.701Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thermotools","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thermotools/repositories"},"packages":[{"id":5415396,"name":"thermopack","ecosystem":"pypi","description":"Python interface to thermopack","homepage":"https://github.com/thermotools/thermopack","licenses":"MIT License","normalized_licenses":["MIT"],"repository_url":"https://github.com/thermotools/thermopack","keywords_array":["physics","thermodynamics","equations_of_state","phase_equilibria","SAFT"],"namespace":null,"versions_count":7,"first_release_published_at":"2023-08-18T10:02:55.016Z","latest_release_published_at":"2024-05-15T09:06:09.000Z","latest_release_number":"2.2.3","last_synced_at":"2026-04-11T11:07:22.145Z","created_at":"2022-11-11T09:56:53.977Z","updated_at":"2026-04-11T11:36:46.152Z","registry_url":"https://pypi.org/project/thermopack/","install_command":"pip install thermopack --index-url https://pypi.org/simple","documentation_url":"https://thermopack.readthedocs.io/","metadata":{"funding":null,"documentation":null,"classifiers":["License :: OSI Approved :: MIT License","Operating System :: MacOS","Operating System :: Microsoft :: Windows","Operating System :: POSIX :: Linux","Programming Language :: Fortran","Programming Language :: Python :: 3"],"normalized_name":"thermopack","project_status":null},"repo_metadata":{"id":63029557,"uuid":"503707872","full_name":"thermotools/thermopack","owner":"thermotools","description":"Thermopack is a thermodynamic model library for fluid properties and PVT calculations","archived":false,"fork":false,"pushed_at":"2026-02-26T18:05:50.000Z","size":199647,"stargazers_count":96,"open_issues_count":2,"forks_count":24,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-03-18T09:38:30.203Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Fortran","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thermotools.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-06-15T09:54:53.000Z","updated_at":"2026-03-10T12:04:22.000Z","dependencies_parsed_at":"2023-10-16T18:18:00.255Z","dependency_job_id":"b9ba2d34-97ea-4e51-9b8c-bf96cc35a811","html_url":"https://github.com/thermotools/thermopack","commit_stats":{"total_commits":512,"total_committers":19,"mean_commits":26.94736842105263,"dds":0.607421875,"last_synced_commit":"7ca7bce00d33ef14e90333cfac96e539ab6b1b45"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/thermotools/thermopack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thermotools","download_url":"https://codeload.github.com/thermotools/thermopack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30800835,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-20T22:51:33.771Z","status":"online","status_checked_at":"2026-03-21T02:00:07.962Z","response_time":114,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"thermotools","name":"thermotools","uuid":"103247158","kind":"organization","description":null,"email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/103247158?v=4","repositories_count":2,"last_synced_at":"2023-05-10T12:17:12.683Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/thermotools","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-05-10T12:17:12.701Z","updated_at":"2023-05-10T12:17:12.701Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thermotools","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thermotools/repositories"},"tags":[{"name":"v2.2.4","sha":"ca75d8e095e8b951616897efe1bca9b8c3badda7","kind":"commit","published_at":"2024-12-09T09:01:59.000Z","download_url":"https://codeload.github.com/thermotools/thermopack/tar.gz/v2.2.4","html_url":"https://github.com/thermotools/thermopack/releases/tag/v2.2.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thermotools/thermopack@v2.2.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.2.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.2.4/manifests"},{"name":"Latest-beta","sha":"51f33cc5d4db27e83ca8f00cec8da2ca43954076","kind":"commit","published_at":"2024-10-15T16:32:15.000Z","download_url":"https://codeload.github.com/thermotools/thermopack/tar.gz/Latest-beta","html_url":"https://github.com/thermotools/thermopack/releases/tag/Latest-beta","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thermotools/thermopack@Latest-beta","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/Latest-beta","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/Latest-beta/manifests"},{"name":"v2.2.2","sha":"a5acf51fecb8189cc7d42204758a68a4c6e95952","kind":"tag","published_at":"2024-03-22T12:53:54.000Z","download_url":"https://codeload.github.com/thermotools/thermopack/tar.gz/v2.2.2","html_url":"https://github.com/thermotools/thermopack/releases/tag/v2.2.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thermotools/thermopack@v2.2.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.2.2/manifests"},{"name":"v2.2","sha":"3a982c00287f60ccdf6b059dc36b6680e957dcf8","kind":"tag","published_at":"2024-03-04T09:26:26.000Z","download_url":"https://codeload.github.com/thermotools/thermopack/tar.gz/v2.2","html_url":"https://github.com/thermotools/thermopack/releases/tag/v2.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thermotools/thermopack@v2.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.2/manifests"},{"name":"v2.2.1","sha":"3a982c00287f60ccdf6b059dc36b6680e957dcf8","kind":"tag","published_at":"2024-03-04T09:25:18.000Z","download_url":"https://codeload.github.com/thermotools/thermopack/tar.gz/v2.2.1","html_url":"https://github.com/thermotools/thermopack/releases/tag/v2.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thermotools/thermopack@v2.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.2.1/manifests"},{"name":"v2.2.0","sha":"04f994bf938e88d0dedef7c45ca8a773e77d36db","kind":"tag","published_at":"2024-02-26T07:42:03.000Z","download_url":"https://codeload.github.com/thermotools/thermopack/tar.gz/v2.2.0","html_url":"https://github.com/thermotools/thermopack/releases/tag/v2.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thermotools/thermopack@v2.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.2.0/manifests"},{"name":"v2.1.0","sha":"734ddae7df8692e24b2aee80be3656139ddfc00f","kind":"commit","published_at":"2022-12-07T07:15:04.000Z","download_url":"https://codeload.github.com/thermotools/thermopack/tar.gz/v2.1.0","html_url":"https://github.com/thermotools/thermopack/releases/tag/v2.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thermotools/thermopack@v2.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.1.0/manifests"},{"name":"v2.0","sha":"69cb5ec4ec000b31294dd7b501d017221ceed19f","kind":"commit","published_at":"2020-10-09T06:53:31.000Z","download_url":"https://codeload.github.com/thermotools/thermopack/tar.gz/v2.0","html_url":"https://github.com/thermotools/thermopack/releases/tag/v2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thermotools/thermopack@v2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/tags/v2.0/manifests"}]},"repo_metadata_updated_at":"2026-04-11T11:36:46.114Z","dependent_packages_count":1,"downloads":1952,"downloads_period":"last-month","dependent_repos_count":1,"rankings":{"downloads":21.539375231842303,"dependent_repos_count":21.754255807829878,"dependent_packages_count":4.701233353001889,"stargazers_count":15.208278476000839,"forks_count":14.217482975807677,"docker_downloads_count":null,"average":15.484125168896517},"purl":"pkg:pypi/thermopack","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/thermopack","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/pypi/thermopack","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/thermopack/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-03-29T14:01:06.295Z","issues_count":24,"pull_requests_count":219,"avg_time_to_close_issue":4635747.105263158,"avg_time_to_close_pull_request":765465.2884615385,"issues_closed_count":19,"pull_requests_closed_count":208,"pull_request_authors_count":9,"issue_authors_count":15,"avg_comments_per_issue":1.4583333333333333,"avg_comments_per_pull_request":0.6118721461187214,"merged_pull_requests_count":199,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":10,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":249307.25,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":8,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.2,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":8,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/issues","maintainers":[{"login":"vegardjervell","count":47,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/vegardjervell"},{"login":"morteham","count":24,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/morteham"}],"active_maintainers":[{"login":"vegardjervell","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/vegardjervell"},{"login":"morteham","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/morteham"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/thermopack/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/thermopack/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/thermopack/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/thermopack/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/thermopack/codemeta","maintainers":[{"uuid":"vegardgjervell","login":"vegardgjervell","name":null,"email":null,"url":null,"packages_count":5,"html_url":"https://pypi.org/user/vegardgjervell/","role":null,"created_at":"2022-12-06T08:16:07.278Z","updated_at":"2022-12-06T08:16:07.278Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/vegardgjervell/packages"},{"uuid":"morteham","login":"morteham","name":null,"email":null,"url":null,"packages_count":6,"html_url":"https://pypi.org/user/morteham/","role":null,"created_at":"2022-11-21T23:05:17.823Z","updated_at":"2022-11-21T23:05:17.823Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/morteham/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":839750,"maintainers_count":358056,"namespaces_count":0,"keywords_count":271316,"github":"pypi","metadata":{"funded_packages_count":53172},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2026-04-09T05:08:03.587Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}}],"commits":{"id":693742,"full_name":"thermotools/thermopack","default_branch":"main","total_commits":1233,"total_committers":20,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":61.65,"dds":0.6828872668288727,"past_year_total_commits":14,"past_year_total_committers":3,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":4.666666666666667,"past_year_dds":0.1428571428571429,"last_synced_at":"2026-04-12T20:36:40.521Z","last_synced_commit":"d68c794c7342bfc6938eb424a1fbb88b7780b738","created_at":"2023-03-09T11:33:24.273Z","updated_at":"2026-04-12T20:36:30.279Z","committers":[{"name":"Morten Hammer","email":"morten.hammer@sintef.no","login":"morteham","count":391},{"name":"Vegard Gjeldvik Jervell","email":"vegard.g.j@icloud.com","login":"vegardjervell","count":328},{"name":"Morten Hammer","email":"morten.hammer@ntnu.no","login":null,"count":297},{"name":"Ailo Aasen","email":"ailo.aasen@sintef.no","login":"ailoa","count":56},{"name":"Ailo Aasen","email":"ailo.aasen@ntnu.no","login":null,"count":43},{"name":"bendiks","email":"bendiks@sintef.no","login":null,"count":36},{"name":"Karl Yngve Lervåg","email":"karl.yngve+git@gmail.com","login":"lervag","count":30},{"name":"BjornAStrom","email":"bjorn.strom@sintef.no","login":"BjornAStrom","count":15},{"name":"Bendik Støa Sannes","email":"bendik.sannes@sintef.no","login":null,"count":13},{"name":"Tage Maltby","email":"tage.maltby@ntnu.no","login":null,"count":5},{"name":"morteham","email":"Morten.Hammer@ntnu.no","login":null,"count":5},{"name":"Geir Ove Myhr","email":"geir.ove.myhr@safetec.no","login":null,"count":4},{"name":"Jabir Ali Ouassou","email":"jabirali@switzerlandmail.ch","login":null,"count":3},{"name":"Lars Hov Odsæter","email":"lars.hov.odsater@dnv.com","login":null,"count":1},{"name":"Morten Hammer","email":"morteham@Mortens-iMac.local","login":null,"count":1},{"name":"Øivind Wilhelmsen","email":"oivind.wilhelmsen@sintef.no","login":null,"count":1},{"name":"Hans Skarsvåg","email":"hans.skarsvag@sintef.no","login":"hansskarsvaag","count":1},{"name":"Ian Bell","email":"ian.h.bell@gmail.com","login":"ibell","count":1},{"name":"Stig Helgeland","email":"sh@edrilling.no","login":"stigh","count":1},{"name":"Vitor Heitor Cardoso Cunha","email":"heitorvitorc@gmail.com","login":"heitorvitorc","count":1}],"past_year_committers":[{"name":"Vegard Gjeldvik Jervell","email":"vegard.g.j@icloud.com","login":"vegardjervell","count":12},{"name":"Vitor Heitor Cardoso Cunha","email":"heitorvitorc@gmail.com","login":"heitorvitorc","count":1},{"name":"Morten Hammer","email":"hammer.morten@gmail.com","login":"morteham","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-13T00:00:06.408Z","repositories_count":6212764,"commits_count":903898909,"contributors_count":34940383,"owners_count":1143995,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"thermotools/thermopack","html_url":"https://github.com/thermotools/thermopack","last_synced_at":"2026-04-01T05:00:38.789Z","status":"active","issues_count":25,"pull_requests_count":219,"avg_time_to_close_issue":4635747.105263158,"avg_time_to_close_pull_request":765465.2884615385,"issues_closed_count":19,"pull_requests_closed_count":208,"pull_request_authors_count":9,"issue_authors_count":16,"avg_comments_per_issue":1.52,"avg_comments_per_pull_request":0.6118721461187214,"merged_pull_requests_count":199,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":10,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":249307.25,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":8,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":3.0,"past_year_avg_comments_per_pull_request":0.2,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":8,"created_at":"2023-05-15T05:25:54.357Z","updated_at":"2026-04-01T05:00:38.789Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thermotools%2Fthermopack/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":15,"CONTRIBUTOR":7,"COLLABORATOR":3},"pull_request_author_associations_count":{"CONTRIBUTOR":146,"COLLABORATOR":68,"NONE":5},"issue_authors":{"vegardjervell":7,"laods":3,"morteham":2,"ffraile":1,"ailoa":1,"jenrei":1,"kotvkvante":1,"tlorance":1,"kristinekruken":1,"flst01":1,"Ayman15":1,"eleleme":1,"helleopd":1,"emmett-b":1,"iboisvert":1,"RPeter18":1},"pull_request_authors":{"morteham":111,"vegardjervell":67,"ailoa":29,"BjornAStrom":6,"laods":2,"stigh":1,"heitorvitorc":1,"kosbreiev":1,"gomyhr":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-09T00:00:10.509Z","repositories_count":14202855,"issues_count":34661405,"pull_requests_count":113271142,"authors_count":11232236,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"NONE":1},"past_year_pull_request_author_associations_count":{"COLLABORATOR":9,"CONTRIBUTOR":1},"past_year_issue_authors":{"eleleme":1},"past_year_pull_request_authors":{"vegardjervell":8,"heitorvitorc":1,"morteham":1},"maintainers":[{"login":"vegardjervell","count":47,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/vegardjervell"},{"login":"morteham","count":24,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/morteham"}],"active_maintainers":[{"login":"vegardjervell","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/vegardjervell"},{"login":"morteham","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/morteham"}]},"events":{"total":{"ReleaseEvent":2,"DeleteEvent":21,"PullRequestEvent":47,"ForkEvent":11,"IssuesEvent":6,"WatchEvent":28,"IssueCommentEvent":14,"PushEvent":61,"PullRequestReviewEvent":26,"CreateEvent":24},"last_year":{"DeleteEvent":4,"PullRequestEvent":7,"ForkEvent":3,"IssuesEvent":1,"WatchEvent":13,"IssueCommentEvent":1,"PushEvent":11,"PullRequestReviewEvent":4,"CreateEvent":6}},"keywords":[],"dependencies":[],"score":15.20911811237839,"created_at":"2024-11-14T00:00:54.141Z","updated_at":"2026-04-13T11:00:55.016Z","avatar_url":"https://github.com/thermotools.png","language":"Fortran","category":"Emissions","sub_category":"Carbon Capture","monthly_downloads":1952,"total_dependent_repos":1,"total_dependent_packages":1,"readme":"\u003c!--- \nGenerated at: 2024-12-13T12:43:28.581382\nThis is an auto-generated file, generated using the script at thermopack/addon/pyUtils/docs/join_docs.py\nThe file is created by joining the contents of the files\n    /Users/vegardjervell/code/thermopack/addon/pyUtils/docs/../../../docs/vCurrent/\n        readme_parts/header.md\n        readme_parts/github_toc.md\n        metapages/please_cite.md\n        readme_parts/structure.md\n        vCurrent/source_build.md\n        vCurrent/getting_started.md\n        vCurrent/more_advanced.md\n        vCurrent/new_fluids.md\n        vCurrent/Component-name-mapping.md\n---\u003e\n\n# [ThermoPack homepage](https://thermotools.github.io/thermopack/)\n\nFor the full documentation and user guide to ThermoPack, see the [ThermoPack homepage.](https://thermotools.github.io/thermopack/)\nIf you are running ThermoPack installed via `pip`, make sure to check the documentation for the correct version by selecting \nthe version number in the sidebar.\n\n## About\n\nThermopack is a thermodynamics library for multi-component and\nmulti-phase thermodynamics developed at [SINTEF Energy\nResearch](https://www.sintef.no/en/sintef-energy/) and [NTNU\nDepartment of\nChemistry](https://www.ntnu.edu/chemistry/research/thermodynamics). Through\ndecades of research, we have developed a software that performs\nthermodynamic calculations. A large selection of equations of state\nhas been implemented in this software. Most of these equations of\nstate have been developed by other research groups around the world,\nbut some of them have been developed by us. Thermopack has been a\nmuch-appreciated in-house powerhouse.\n\n![](https://thermotools.github.io/thermopack/assets/graphics/readme_intro.gif?raw=true)\n\nThermopack is available for everybody, free of charge under the\nMIT/Apache 2.0 open-source licenses. Thermopack is written in FORTRAN\nto handle heavy numerical computations associated with process and\ncomputational fluid dynamics (CFD) simulations. The thermodynamic\nframework is easily interfaced from C/C++ and also contains a flexible\nPython wrapper to make scripting easy.\n\n# Table of contents\n  * [Please cite](#please-cite)\n  * [Authors and contact persons](#authors-and-contact-persons)\n  * [License](#license)\n  * [Acknowledgments](#acknowledgments)\n  * [Program structure](#program-structure)\n  * [Building from Source](#building-from-source)\n  * [Getting started - Python](#getting-started---python)\n    * [Initialising an equation of state](#initialising-an-equation-of-state)\n  * [Doing calculations](#doing-calculations)\n    * [pVT-properties](#pvt-properties)\n    * [Phase diagrams and equilibria](#phase-diagrams-and-equilibria)\n    * [Isolines](#isolines)\n    * [Critical point](#critical-point)\n  * [Advanced usage - Python](#more-advanced-usage---Python)\n    * [Interaction parameters](#interaction-parameters) \n    * [Adding new fluids](#adding-new-fluids)\n  * [Component identifiers](#fluid-name-to-fluid-identifyer-mapping) \n\n# Please Cite\n\nThermopack has been developed through many projects, and have produced many\narticles. If you are writing academic publications, please cite one or more of\nthe following articles:\n\n- For general usage:  \n[Thermodynamic Modeling with Equations of State: Present Challenges with Established Methods](https://doi.org/10.1021/acs.iecr.7b00317)\n\n- Quantum cubic:  \n[Accurate quantum-corrected cubic equations of state for helium, neon, hydrogen, deuterium and their mixtures](https://doi.org/10.1016/j.fluid.2020.112790)\n\n- SAFT-VR Mie and SAFT-VRQ Mie:  \n[Equation of state and force fields for Feynman--Hibbs-corrected Mie fluids. I. Application to pure helium, neon, hydrogen, and deuterium](https://doi.org/10.1063/1.5111364)  \n[Equation of state and force fields for Feynman–Hibbs-corrected Mie fluids. II. Application to mixtures of helium, neon, hydrogen, and deuterium](https://doi.org/10.1063/1.5136079)  \n[Choice of reference, the influence of non-additivity and challenges in thermodynamic perturbation theory for mixtures](https://doi.org/10.1063/1.5142771)\n\n- CPA, PC-SAFT or cubic models with Wong–Sandler, Huron–Vidal or UNIFAC mixing\nrules:  \n[Thermodynamic models to accurately describe the PVTxy-behavior of water/carbon dioxide mixtures](https://doi.org/10.1016/j.fluid.2017.02.006)\n\n- Using dry-ice and water-ice model or the tc-PR/tc-RK:  \n[Depressurization of CO\u003csub\u003e2\u003c/sub\u003e-N\u003csub\u003e2\u003c/sub\u003e and CO\u003csub\u003e2\u003c/sub\u003e-He in a pipe: Experiments and modelling of pressure and temperature dynamics](https://doi.org/10.1016/j.ijggc.2021.103361)\n\n- Energy-density and entropy-density flashes:  \n[The influence of CO2 mixture composition and equations of state on simulations of transient pipeline decompression](https://doi.org/10.1016/j.ijggc.2016.07.004)\n\n- Mapping spinodals or critical points:  \n[The spinodal of single-and multi-component fluids and its role in the development of modern equations of state](https://doi.org/10.1016/j.fluid.2016.12.018)  \n[Predicting triggering and consequence of delayed LNG RPT](https://doi.org/10.1016/j.jlp.2018.06.001)\n\n- Perturbation theories for Lennard-Jones spline fluid:  \n[Perturbation theories for fluids with short-ranged attractive forces: A case study of the Lennard-Jones spline fluid](https://doi.org/10.1063/5.0082690)  \n[Thermodynamic properties of the 3D Lennard-Jones/spline model](https://doi.org/10.1080/00268976.2019.1664780)\n\n## License\nThermopack is distributed under the [MIT\nlicense](https://github.com/thermotools/thermopack/blob/main/LICENSE-MIT)\nand [Apache\n2.0](https://github.com/thermotools/thermopack/blob/main/LICENSE-APACHE).\n\n## Acknowledgments\nA number of colleagues at SINTEF Energy Research and NTNU have contributed to the\ndevelopment of thermopack. We gratefully acknowledge their contributions.\n\n# Program structure\n\nEach EoS in thermopack is a class, which inherits from the `thermopack` class found in `thermo.py`. The primary documentation\nfor the thermopack python wrapper consists of the [docstrings of the thermopack class](https://github.com/thermotools/thermopack/blob/main/addon/pycThermopack/thermopack/thermo.py).\nThis class contains all generic methods used to compute thermodynamic properties, phase equilibria, etc. The inheriting \nclasses simply ensure that the correct part of the Fortran-module is linked when performing calculations, and provide \nsome extended functionality for handling EoS parameters and such. See the [wiki](https://github.com/thermotools/thermopack/wiki/) \nfor more information on this. \n\nFluid parameters are compiled into the Fortran-module, and are not directly accessible through the Python-wrapper. \nThe entire fluid parameter database used by thermopack may be found in the [`/fluids` directory](https://github.com/thermotools/thermopack/tree/main/fluids) \nin the GitHub repo. In order to model fluids not currently supported in the module available through `pip`, thermopack\nmust be compiled from source with the new parameters. See the [wiki](https://github.com/thermotools/thermopack/wiki/) \nfor information on how to add new fluids, and the [GitHub README](https://github.com/thermotools/thermopack) for a guide \non how to compile from source. Please feel free to leave a PR for new parameter sets such that these can be included in \nfuture releases of thermopack.\n\n## File System\nBrief description of file structure:\n\n- `thermopack/`: Main library folder containing make scripts etc.\n- `thermopack/src/`: Main path for Fortran source code\n- `thermopack/unittest/`: Test files written for pFUunit\n- `thermopack/bin/`: Compiled binaries and libraries\n- `thermopack/doc/`: Memos and doxygen documentation\n- `thermopack/fluids/`: Pure fluid files\n- `thermopack/binaries/`: Files containing binary interaction parameters etc.\n- `thermopack/MSVStudio/`: Microsoft Visual Studio project and solution files\n- `thermopack/include/`: C/C++ include file\n- `thermopack/pyplot/`: Example plot-scripts (Plotting text files generated by Thermopack)\n- `thermopack/addon/`: Add-on functionality\n- `thermopack/addon/pycThermopack/`: Python interface\n- `thermopack/addon/pyUtils/`: Python utilities for generating fortran code and makefile input.\n- `thermopack/addon/trend_interface/`: Interface for working with the TREND/EOSCG library developed by Roland Span and Ruhr-Universität Bochum\n\n\n# Installing the latest version of ThermoPack\n\n- [Using pip](#using-pip)\n- [Installing from wheels](#installing-from-wheels)\n- [Building from source](#building-from-source)\n  - [Prerequisites](#prerequisites)\n  - [CMake setup (macOS and Linux)](#cmake-setup-macos-and-linux)\n  - [CMake setup (Windows)](#cmake-setup-windows)\n- [Legacy build system (without CMake)](#legacy-build-system-without-cmake)\n  - [Linux setup](#linux-setup)\n  - [MacOS setup](#macos-setup)\n  - [Windows setup](#windows-setup)\n    - [MSYS2/Mingw-W64 setup](#msys2mingw-w64-setup)\n  - [Docker setup](#docker-setup)\n\n## Using pip\nThermopack has been compiled for Windows, Linux and macOS\nand made available on the [Python Package Index](https://pypi.org/project/thermopack/) (pypi), and can be\ninstalled using pip\n\n```bash\npip3 install thermopack\n```\n\nFor documentation on the version available on pypi, refer to the appropriate version number in the sidebar.\n\n## Installing from wheels\nPre-built wheels for the latest version of ThermoPack on GitHub are available for download [here](https://github.com/thermotools/thermopack/releases/tag/Latest-beta). Refer to the linked page for instructions on how to install packages directly from a python wheel. Please note that the latest version on GitHub may be less stable, tested, and well documented than the versions distributed on PyPI.\n\n## Building from source\nThe following sections show how to fetch, compile and install Thermopack and\nthe Python frontend pycThermopack. When things are properly installed, it may\nbe useful to look into the examples provided in the [getting started guide](https://thermotools.github.io/thermopack/vcurrent/getting_started.html), and the \n[pyExamples](https://github.com/thermotools/thermopack/tree/main/addon/pyExamples).\n\n### Prerequisites\nThermopack source code can be compiled with the [GNU Fortran\ncompiler](https://gcc.gnu.org/wiki/GFortran) or [Intel\nFORTRAN](https://software.intel.com/content/www/us/en/develop/tools/compilers/fortran-compilers.html)\nand is dependent on the [LAPACK](http://www.netlib.org/lapack/) and\n[BLAS](http://www.netlib.org/blas/) libraries. On the Windows OS the code can\nbe compiled using [Microsoft Visual\nStudio](https://visualstudio.microsoft.com/vs/). A solution file is found in\n[thermopack/MSVStudio](https://github.com/thermotools/thermopack/tree/main/MSVStudio),\nassuming that the Intel Fortran compiler is integrated with Microsoft Visual\nStudio.\n\nFor macOS and Linux, Lapack and Blas can likely be installed using `apt`, `brew`, or similar. For windows, Lapack will need to be built from source. The [CMake setup for Windows](#cmake-setup-windows) is configured to handle this automatically.\n\n### CMake setup (macOS and Linux)\n\nThe `cmake`-based build system assumes that you have Lapack and gfortran installed, see above instructions for more on that.\n\nBuild and install thermopack by running\n```bash\nmkdir build\ncd build\ncmake ..\nmake install\n```\n\nThis will ensure that the thermopack dynamic library is properly installed to `thermopack/installed` and `thermopack/addon/pycThermopack/thermopack`.\n\nTo set up the python wrapper, \n```bash\npython addon/pycThermopack/map_platform_specifics.py\npip install addon/pycThermopack/\n```\nthis will generate the file `addon/pycThermopack/thermopack/platform_specifics.py` and install thermopack to your activated virtual environment.\n\nThermoPack can be configured to return computed properties as either tuples (`v2`) or using the `Property` struct (`v3`), this is toggled with\nthe `-diffs` flag when running `map_platform_specifics.py` as\n```bash\npython map_platform_specifics.py --diffs=v2 # Use tuples\npython map_platform_specifics.py --diffs=v3 # use Property\n```\nthe default value is `--diffs=v3`. After running this command you should recieve a confirmation message that thermopack was successfully configured. \n\n### CMake setup (Windows)\n\nTo compile thermopack (and Lapack) with Intel FORTRAN and MSVS, first run\n```\ngit submodule update --init --recursive\n```\nfrom within the `thermopack` direcory, in order to clone Lapack. Then, run\n```\nmkdir build\ncd build\ncmake .. -DCMAKE_Fortran_COMPILER=ifort -DCMAKE_BUILD_TYPE=Release\ncmake --build . --config=Release --target install\n```\nCompile and install Lapack, and install the thermopack dynamic library to `thermopack/installed` and `thermopack/addon/pycThermopack/thermopack`.\n\nTo configure and install the python-wrapper, run\n```\npython addon/pycThermopack/map_platform_specifics.py\npip install addon/pycThermopack/\n```\n\n*Note:* If your thermopack dynamic library is called `libthermopack.dll`, and not `thermopack.dll`, you will instead need to run\n```\npython addon/pycThermopack/map_platform_specifics.py --ifort=True\npip install addon/pycThermopack/\n```\n\n## Legacy build system (without CMake)\n\n### Linux setup\nThe Thermopack source code is downloaded by cloning the library to your local\ncomputer. The following commands assume that you have a local installation of\n[Git](https://git-scm.com/), [gfortran](https://gcc.gnu.org/fortran/) and\n[Python 3](https://www.python.org/) with [pip](https://pypi.org/project/pip/).\nTo compile using Intel FORTRAN, use `make optim_ifort`.\n\n```bash\n# Fetch and compile\ngit clone https://github.com/thermotools/thermopack.git\ncd thermopack\nmake optim\n\n# Prepare and install pycThermopack, aka \"thermopack\"\n# Remark: On some systems, Python 3 is installed as python, not python3. If so,\n# you can replace \"python3\" with \"python\" and perhaps also \"pip3\" with \"pip\" in\n# the below.\ncd addon/pycThermopack\npython3 makescript.py optim\npip3 install --user .\n```\n\nIf you are working actively with the Thermopack code, either the Fortran\nbackend or the Python frontend, then it may be useful to install in editable\nmode (aka develop mode). This will install a _link_ to the develop files\ninstead of copying the files when installing. This can be done with the `-e`\noption, i.e.:\n\n```bash\npip3 install -e --user .\n```\n\nSee also [addon/pycThermopack/README.md](https://github.com/thermotools/thermopack/tree/main/addon) for\nmore details on pycThermopack.\n\n### MacOS setup\nThe easiest way to get started is via [Homebrew](https://brew.sh). After\nfollowing the instructions on their website to set it up, install `gcc`\nand `make`. Open a terminal (e.g. the default Terminal.app), and type:\n```\nbrew install gcc make\n```\nThen follow the Linux instructions above (you may need to replace `make` with `gmake`).\nSome additional packages like `git` and `python` can also be installed via\nHomebrew before you start, but if you use a recent version of MacOS (e.g.\nCatalina), then the versions installed by default should be sufficient.\n\n### Windows setup\nDownload and compile LAPACK and BLAS libraries (you will need CMake and\na working compiler).\n\nTo be compatible with the current settings, you need to compile using Intel\nFortran with Visual Studio, and configure as follows:\n\n```\n- Fortran/Data/Default Real KIND = 8\n- Fortran/External Procedures/Calling Convention = cref\n- Fortran/External Procedures/Name Case Interpretation = lowercase\n- Fortran/External Procedures/String Length Argument Parsing = After All Arguments\n- Fortran/External Procedures/Append Underscore to External Names = Yes\n- Fortran/Floating Point/Floating Point Model = precise\n```\n\nCopy LAPACK and BLAS libraries to the paths:\n\n- thermopack\\lapack\\lib\\Debug\n- thermopack\\lapack\\lib\\Release\n\nOpen thermopack\\MSVStudio\\thermopack.sln using Visual Studio, and compile the wanted configuration.\n\nSee [addon/pycThermopack/README.md](https://github.com/thermotools/thermopack/tree/main/addon) for\nhow to install pycThermopack.\n\n#### MSYS2/Mingw-W64 setup\nThermopack can also be compiled using gfortran in the MSYS2 environment. Download MSYS2 from [https://www.msys2.org](https://www.msys2.org), and install and update the package system following the instructions given. Avoid having spaces in the MSYS2 installation directory path, as the Makefile might not work. Having a working MSYS2 installation, thermopack can be compiled after installing the following packages:\n\n```bash\npacman -S git\npacman -S mingw-w64-x86_64-gcc-fortran\npacman -S mingw-w64-x86_64-openblas\npacman -S mingw-w64-x86_64-make\npacman -S mingw-w64-x86_64-dlfcn\n```\n\nOpen the `MSYS2 MinGW 64-bit` application, and enter the following in the terminal:\n\n```bash\ngit clone https://github.com/thermotools/thermopack.git\ncd thermopack\nmingw32-make.exe optim\n```\n\nSee [addon/pycThermopack/README.md](https://github.com/thermotools/thermopack/tree/main/addon) for\nhow to install pycThermopack for the MSYS2 environment.\n\n### Docker setup\nSee [addon/docker/README.md](https://github.com/thermotools/thermopack/tree/main/addon/docker) for\navailable Dockerfiles to run Thermopack with docker.\n\n# Getting Started - Python\n\n# Getting started - Python\nThis is a short introduction to thermopack. Once you've gotten started, we recommend a look at the [Examples](https://github.com/thermotools/thermopack/tree/main/addon/pyExamples) in the GitHub repo. Comprehensive documentation for the methods available through the python interface can also be found in the [doc page for the thermo class.](https://thermotools.github.io/thermopack/vcurrent/thermo_methods.html). For more advanced users, a look at the [more advanced page](https://thermotools.github.io/thermopack/vcurrent/more_advanced.html) may also be useful.\n\n*Note:* This guide applies to the most recent version of ThermoPack og GitHub. For guides applicable to versions found on PyPI,\nfind the appropriate version in the sidebar on the [ThermoPack homepage.](https://thermotools.github.io/thermopack/index.html)\n\nEquations of State (EoS's) in ThermoPack are classes. To do calculations for a given mixture an EoS object must first be initialized for that mixture, as demonstrated in the [Initializing an EoS section](#initialising-an-equation-of-state). Then, a wide variety of thermodynamic computations can be done, as demonstrated in the remaining sections.\n\n## Contents\n- [Getting started - Python](#getting-started---python)\n  - [Contents](#contents)\n  - [Initialising an equation of state](#initialising-an-equation-of-state)\n- [Doing calculations](#doing-calculations)\n  - [pVT-properties](#pvt-properties)\n    - [Differentials](#differentials)\n  - [Phase diagrams and Equilibria](#phase-diagrams-and-equilibria)\n    - [Flash calculations](#flash-calculations)\n    - [Phase envelopes](#phase-envelopes)\n      - [Tp- and Tv- phase envelopes](#tp--and-tv--phase-envelopes)\n      - [pxy- and txy- phase envelopes](#pxy--and-txy--phase-envelopes)\n    - [Dew- and bubble points](#dew--and-bubble-points)\n  - [Isolines](#isolines)\n  - [Critical point](#critical-point)\n\n## Initialising an equation of state\nAn overview of available equations of state can be found [here](https://thermotools.github.io/thermopack/vcurrent/method_docs.html).\n\nAn EoS is initialized by passing in the [fluid identifiers](https://thermotools.github.io/thermopack/vcurrent/Component-name-mapping.html) of the mixture, for example\n\n```Python\nfrom thermopack.saftvrmie import saftvrmie\neos = saftvrmie('C1,CO2')\n```\nwill initialize a SAFT-VR Mie EoS for a mixture of methane and CO2. The complete list of component identifiers is in the [Fluid identifiers list](https://thermotools.github.io/thermopack/vcurrent/Component-name-mapping.html). PC-SAFT, SAFT-VRQ Mie and Lee-Kesler EoS are initialized in the same way, as\n```Python\nfrom thermopack import saftvrmie, saftvrqmie, pcsaft, lee_kesler\nsvrm = saftvrmie.saftvrmie('AR,KR') # SAFT-VR Mie EoS for Ar/Kr mixture\nsvrqm = saftvrqmie.saftvrqmie('HE') # SAFT-VRQ Mie EoS for pure He\npcs = pcsaft.pcsaft('BENZENE,NC6,NC12') # PC-SAFT EoS for ternary benzene/hexane/dodecane mixture\nlk = lee_kesler.lee_kesler('N2,O2') # Lee-Kesler EoS for nitrogen/oxygen mixture \n```\nFor PC-SAFT, both the simplified PC-SAFT (`SPC-SAFT`) and Polar PC-SAFT (`PCP-SAFT`) are available\n\n```Python\nfrom thermopack.pcsaft import SPC_SAFT, PCP_SAFT\nspcs = SPC_SAFT('NC6,NC12') # Simplified PC-SAFT\npcps = PCP_SAFT('H2O,MEOH') # Polar PC-SAFT\n```\n\nThe cubic equations of state are found in the `cubic` module. Available cubic EoS's and more information on the individual cubics, mixing rules, etc. can be found on the [cubic page](https://thermotools.github.io/thermopack/vcurrent/cubic_methods.html).\n```Python\nfrom thermopack.cubic import SoaveRedlichKwong, RedlichKwong, PengRobinson, PengRobinson78\nfrom thermopack.cubic import SchmidtWensel, PatelTeja, VanDerWaals\nsrk = SoaveRedlichKwong('NH3,C2') # SRK EoS for ammonia/ethane mixture\nrk = RedlichKwong('NC6,CO2,NC12') # Redlich-Kwong EoS\npr = PengRobinson('IC4,NC10') # PR EoS for isobutane/decane mixture\npr78 = PengRobinson78('N2,O2,CO2') # # PR-78 EoS for isobutane/decane mixture\nvdw = VanDerWaals('C1,C2,C3,N2,O2') # VdW EoS for methane/ethane/propane/nitrogen/oxygen mixture\nsw = SchmidtWensel('R11,R12') # Schmidt-Wensel EoS for FCl3C/F2Cl2C mixture\npt = PatelTeja('PRLN') # Patel-Teja EoS for pure propylene\n```\nIn addition to these, the Translated-Consisten Peng-Robinson is available as\n```Python\nfrom thermopack.tcPR import tcPR\ntcpr = tcPR('F6S,SO2') # Translated-Consistent PR EoS for SF6/SO2 mixture\n```\nFor more fine-tuned control of the cubic EoS, the parent class [`cubic`](https://thermotools.github.io/thermopack/vcurrent/cubic_methods.html) can be initialised directly, to explicitly \nset mixing rules, alpha-correlation etc.\n\nCubic-plus association EoS's are available for the SRK and PR EoS through the `cpa` module as\n```Python\nfrom thermopack.cpa import SRK_CPA, PR_CPA\nsrk_cpa = SRK_CPA('H2O,ETOH,PROP1OL') # SRK-CPA EoS for water/ethanol/propanol mixture\n```\n\nSeveral multiparameter EoS's can interfaced through the `multiparameter.multiparam` class. The available multiparameter EoS's are NIST-MEOS, MBWR16 and MBWR32. These are initialized as\n```Python\nfrom thermopack.multiparameter import multiparam\nnist = multiparam('C3', 'NIST_MEOS') # NIST-MEOS EoS for propane\nmbwr19 = multiparam('C1', 'MBWR19') # MBWR19 EoS for methane\nmbwr32 = multiparam('C2', 'MBWR32') # MBWR32 EoS for ethane\n```\nplease note that not all fluids are supported for multiparameter equations of state, depending on what parameters are available in the fluid database.\n\nFinally, the Extended-corresponding state EoS is available through the `extended_csp.ext_csp` class as\n```Python\nfrom thermopack.extended_csp import ext_csp\neos = ext_csp('C1,C2,C3,NC4', sh_eos='SRK', sh_alpha='Classic',\n              sh_mixing='vdW', ref_eos='NIST_MEOS', ref_comp='C3')\n```\n\nFor more information on the extended-csp EoS please see the [Examples](https://github.com/thermotools/thermopack/tree/main/addon/pyExamples) and the [memo](https://thermotools.github.io/thermopack/memo/index.html).\n\n# Doing calculations\nNow that we have an EoS initialized we can start computing stuff. The primary source on how to use individual methods in thermopack are the [specific documentation of the `thermo` class](https://thermotools.github.io/thermopack/vcurrent/thermo_methods.html). Here, a small subset of the functionality is demonstrated.\n\nNote that all input is in SI units (moles/kelvin/pascal/cubic meters/joule)\n\n## pVT-properties\nSpecific volume, given temperature, pressure and composition is computed as \n```python\nfrom thermopack.saftvrmie import saftvrmie\neos = saftvrmie('NC6,NC10') # Hexane/decane mixture\nT = 300 # Kelvin\np = 1e5 # Pascal\nx = [0.2, 0.8] # Molar composition\nvg, = eos.specific_volume(T, p, x, eos.VAPPH) # Molar volume of gas phase (NB: Notice the comma)\nvl, = eos.specific_volume(T, p, x, eos.LIQPH) # Molar volume of liquid phase (NB: Notice the comma)\n```\nwhere `eos.VAPPH` and `eos.LIQPH` are [phase flags](https://thermotools.github.io/thermopack/vcurrent/phase_flags.html) used to identify different phases. The commas are necessary because all output from thermopack methods are as tuples. \n\nSimilarly, pressure, internal energy, enthalpy, entropy, etc. and associated differentials can be computed via the methods `chemical_potential_tv(T, V, n)`, `internal_energy_tv(T, V, n)`, `enthalpy_tv(T, V, n)`, `helmholtz_tv(T, V, n)`, `entropy_tv(T, V, n)`. For a full overview of the available property calculations see the [TV-property interfaces](https://thermotools.github.io/thermopack/vcurrent/thermo_methods.html#tv-property-interfaces) and the [Tp-property interfaces](thermo_methods.html#tp-property-interfaces) of the [`thermo` class](thermo_methods.html)\n\n### Differentials\n\nIf we want volume differentials, we use the same method, but set the flags to calculate differentials to `True`:\n\n```python\n# Continued \nvg, dvdp = eos.specific_volume(T, p, x, eos.VAPPH, dvdp=True) # Vapour phase molar volume and pressure differential\nvl, dvdT = eos.specific_volume(T, p, x, eos.LIQPH, dvdt=True) # Liquid phase molar volume and temperature differential\n_, dvdn = eos.specific_volume(T, p, x, eos.LIQPH, dvdn=True) # Liquid phase partial molar volumes\n```\n\nDifferentials can be computed as functions of $(T, V, n)$ or as functions of $(T, p, n)$. For an overview of the different methods, see [Advanced usage: Different property interfaces](https://thermotools.github.io/thermopack/vcurrent/more_advanced.html). A short example is given here as:\n\n```Python\n# Continued\nn_tot = 15 # Total number of moles\nn = n_tot * x\nH, dHdn_TV = eos.enthalpy_tv(T, vg, n, dhdn=True) # Compute enthalpy and derivative of enthalpy wrt. mole numbers at constant (T, V)\nh_vap, dhvap_dn_Tp = eos.enthalpy(T, p, x, eos.VAPPH, dhdn=True) # Compute molar vapour phase enthalpy and derivative of molar vapour phase enthalpy wrt. mole numbers at constant (T, p)\nh_liq, dliq_dn_Tp = eos.enthalpy(T, p, x, eos.LIQPH, dhdn=True) # Compute molar liquid phase enthalpy and derivative of molar liquid phase enthalpy wrt. mole numbers at constant (T, p)\nH, dHdn_Tp = eos.enthalpy_tvp(T, vg, n, dhdn=True) # Compute enthalpy and derivative of enthalpy wrt. mole numbers at constant (T, p)\n```\n\n\n**Please note that heat capacities are not available directly**, but must be computed as derivatives of enthalpy and internal energy, as\n\n```Python\nfrom thermopack.cubic import cubic\neos = cubic('C1,C3,NC6', 'SRK') # SRK EoS for a mixture of methane, propane and n-hexane\n\nT = 300 # Kelvin\np = 1e5 # Pascal\nx = [0.2, 0.1, 0.7] # Molar composition\n_, Cp_vap = eos.enthalpy(T, p, x, eos.VAPPH, dhdt=True) # Vapour phase heat capacity at constant pressure, computed as (dH/dT)_{p,n}\n_, Cp_liq = eos.enthalpy(T, p, x, eos.LIQPH, dhdt=True) # Liquid phase heat capacity at constant pressure, computed as (dH/dT)_{p,n}\n\nvg, = eos.specific_volume(T, p, x, eos.VAPPH) # Computing vapour phase specific volume\nvl, = eos.specific_volume(T, p, x, eos.LIQPH) # Liquid phase specific volume\n\n_, Cv_vap = eos.internal_energy_tv(T, vg, x, dedt=True) # Vapour phase heat capacity at constant volume, computed as (dU/dT)_{V,n}\n_, Cv_liq = eos.internal_energy_tv(T, vl, x, dedt=True) # Liquid phase heat capacity at constant volume, computed as (dU/dT)_{V,n}\n```\n\n## Phase diagrams and Equilibria\n\nAs with other calculations, the primary source on how available methods for flash- and equilibria calculations and how to use them is the [documentation of the `thermo` class.](https://thermotools.github.io/thermopack/vcurrent/thermo_methods.html). Here we give a short introduction, for more extensive examples see the [pyExamples](https://github.com/thermotools/thermopack/tree/main/addon/pyExamples) directory.\n\n### Flash calculations\nFlash calculations of several kinds are handled by the methods `twophase_tpflash()`, `twophase_psflash()`, `twophase_phflash()` and `twophase_uvflash()`.\n\nSee the [Flash interfaces](https://thermotools.github.io/thermopack/vcurrent/thermo_methods.html#flash-interfaces) in the [documentation of the `thermo` class](thermo_methods.html) for the specifics on the different flash routines.\n\nAn example calculation using `twophase_tpflash()` may be done as\n```python\nfrom thermopack.saftvrqmie import saftvrqmie\n# SAFT-VRQ Mie for Hydrogen/Helium/Neon mixture \neos = saftvrqmie('H2,HE,NE', minimum_temperature=20) # NB: Set minimum temperature low enough when working at very low temperatures\nT = 35 # Kelvin\np = 3e6 # Pascal (30 bar)\nz = [0.1, 0.25, 0.65] # Molar composition\nflsh = eos.two_phase_tpflash(T, p, z) # flsh is a FlashResult object\nprint(flsh)\n### Output: ###\n# FlashResult object for Tp-flash\n# Containing the attributes (description, name, value):\n#   \tFlash type                     flash_type : Tp  \n#   \tTotal composition              z     : [0.1, 0.25, 0.65]  \n#   \tTemperature [K]                T     : 35  \n#   \tpressure [Pa]                  p     : 3000000.0  \n#   \tLiquid phase composition       x     : [0.05407302 0.03859287 0.90733411]  \n#   \tVapour phase composition       y     : [0.14642524 0.46370066 0.3898741 ]  \n#   \tVapour fraction                betaV : 0.497302408174766  \n#   \tLiquid fraction                betaL : 0.5026975918252341  \n#   \tPhase indentifier index        phase : 0  \n```\nthe result of the flash is accessed from the attributes of the [`FlashResult`](utility_structs.html#flashresult) object, found in [`utils.py`](https://github.com/thermotools/thermopack/blob/main/addon/pycThermopack/thermopack/utils.py), as\n```Python\n# Continued\nx = flsh.x # Liquid composition\ny = flsh.y # Vapour composition\nbetaL = flsh.betaL # Liquid fraction\n# ... etc\n```\n\nThe `FlashResult` object returned by the different flash routines all contain the same attributes. \n\n### Phase envelopes\n\nThermoPack has interfaces to trace (T,p)-, (T,v)- and (p,x,y)-phase envelopes. For the full documentation, see the [docs of the `thermo` class](thermo_methods.html#saturation-interfaces). For more comprehensive examples, see the [Examples](https://github.com/thermotools/thermopack/tree/main/addon/pyExamples).\n\n#### Tp- and Tv- phase envelopes\n\nPhase envelopes can be generated directly with the method `get_envelope_twophase()` as\n\n```python\n# Continued\nT, p = eos.get_envelope_twophase(1e5, x) # arrays of temperature and pressure for phase envelope, starting at 1 bar.\nplt.plot(p, T) # Tp-projection of phase envelope\n\nT, p, v = eos.get_envelope_twophase(1e5, x, calc_v=True) # Also return the specific volume at each point along the phase envelope\nplt.plot(1 / v, T) # rho-T projection of the phase envelope\n```\n\n#### pxy- and txy- phase envelopes\n\nTo compute pxy-type phase envelopes, we use the `get_binary_pxy()` method. This method returns a `XYDiagram` struct, which\nholds the composition and pressure / temperature of each equilibrium phase.\n\nThe `XYDiagram` struct has the attributes `lle`, `l1ve` and `l2ve`, where\n* `lle` holds the composition and pressure / temperature of the Liquid 1 - Liquid 2 equilibria\n  * `lle.x1` is the composition of Liquid 1 (mole fraction of species 1)\n  * `lle.x2` is the composition of Liquid 2 (mole fraction of species 1)\n  * `lle.p` / `lle.T` is the pressure / temperature along the phase boundary\n* `l1ve` holds the composition and pressure / temperature of the Liquid 1 - Vapour equilibria\n  * `l1ve.x` is the composition of Liquid 1 (mole fraction of species 1)\n  * `l1ve.y` is the composition of the vapour (mole fraction of species 1)\n  * `l1ve.p` / `l1ve.T` is the pressure / temperature along the phase boundary\n* `l2ve` holds the composition and pressure / temperature of the Liquid 2 - Vapour equilibria\n  * `l2ve.x` is the composition of Liquid 2 (mole fraction of species 1)\n  * `l2ve.y` is the composition of the vapour (mole fraction of species 1)\n  * `l2ve.p` / `l2ve.T` is the pressure / temperature along the phase boundary\n\nWe get the phase diagram as\n\n```python\nfrom thermopack.cpa import SRK_CPA\n\neos = SRK_CPA('NC6,H2O')  # CPA-SRK eos for Hexane/water mixture\nT = 350\npxy = eos.get_binary_pxy(T)  # Returns a XYDiagram struct\nprint(pxy)\n# Result:\n# XYDiagram object with attributes (name : description)\n# lle  : Liquid 1 - Liquid 2 Equilibrium\n# \tPxyEquilibrium object with attributes (description, name, value)\n# \t\tType of equilibrium                   type : lle\n# \t\tLiquid 1 mole fraction, species 1     x1   : [4.278e-07 ... 4.145e-07], len(x1) = 457\n# \t\tLiquid 2 mole fraction, species 1     x2   : [9.969e-01 ... 9.974e-01], len(x2) = 457\n# \t\tPressure                              p    : [1.648e+05 ... 1.500e+07], len(p) = 457\n# \t\n# l1ve : Liquid 1 - Vapour Equilibrium\n# \tPxyEquilibrium object with attributes (description, name, value)\n# \t\tType of equilibrium                   type : lve\n# \t\tLiquid mole fraction, species 1       x    : [4.278e-07 ... 2.197e-07], len(x) = 66\n# \t\tVapour mole fraction, species 1       y    : [7.880e-01 ... 6.461e-01], len(y) = 66\n# \t\tPressure                              p    : [1.648e+05 ... 1.000e+05], len(p) = 66\n# \t\n# l2ve : Liquid 2 - Vapour Equilibrium \n# \tPxyEquilibrium object with attributes (description, name, value)\n# \t\tType of equilibrium                   type : lve\n# \t\tLiquid mole fraction, species 1       x    : [9.969e-01 ... 1.000e+00], len(x) = 100\n# \t\tVapour mole fraction, species 1       y    : [7.880e-01 ... 1.000e+00], len(y) = 100\n# \t\tPressure                              p    : [1.648e+05 ... 1.289e+05], len(p) = 100\n```\n\nFor ease of use, the `XYDiagram` struct is iterable, such that we can unpack it efficiently as\n```\nlle, l1ve, l2ve = pxy\n```\n\nNow, we can plot the phase diagram as\n\n```python\n# Continued\nimport matplotlib.pyplot as plt\n\n# Liquid-liquid phase boundaries\n# pxy.lle holds the composition and pressure of the liquid phases\nplt.plot(pxy.lle.x1, pxy.lle.p, label='Liquid 1 composition') # lle.x1 is the mole fraction of component 1 (NC12) in Liquid 1 along the phase boundary\nplt.plot(pxy.lle.x2, pxy.lle.p, label='Liquid 2 composition') # lle.x2 is the mole fraction of component 1 (NC12) in Liquid 2 along the phase boundary\n\n# Liquid 1-vapour phase boundaries\n# pxy.l2ve holds composition and pressure along the Liquid 1 - Vapour phase boundary\nplt.plot(pxy.l1ve.x, pxy.l1ve.p, label='Liquid 1 bubble line') # l1ve.x is the mole fraction of component 1 (NC12) in Liquid 1 along the Liquid 1 - Vapour phase boundary\nplt.plot(pxy.l1ve.y, pxy.l1ve.p, label='Liquid 1 dew line') # l1ve.y is the mole fraction of component 1 (NC12) in the Vapour phase along the Liquid 1 - Vapour phase boundary\n\n# Liquid 2-vapour phase boundaries\n# L2VE[2] is the pressure along the Liquid 2 - Vapour phase boundary\nplt.plot(pxy.l2ve.x, pxy.l2ve.p, label='Liquid 2 bubble line') # l2ve.x is the mole fraction of component 1 (NC12) in Liquid 2 along the Liquid 2 - Vapour phase boundary\nplt.plot(pxy.l2ve.y, pxy.l2ve.p, label='Liquid 2 dew line') # l2ve.y is the mole fraction of component 1 (NC12) in the Vapour phase along the Liquid 2 - Vapour phase boundary\n\nplt.ylabel('Pressure [Pa]') # The third element in each tuple is the pressure along the phase boundary\nplt.xlabel('Molar composition')\n```\n\nThe method `get_binary_txy` works in the same way, only replacing the `p` attribute with `T`, such that we can compute\n\n```\np = 1e5\nlle, l1ve, l2ve = eos.get_binary_txy(p) # Unpacking the XYDiagram \n\n# Liquid-liquid phase boundaries\n# l1ve holds the composition and pressure of Liquid 1 and Vapour along the phase boundary\nplt.plot(l1ve.x, l1ve.T, label='Liquid 1 composition') # l1ve.x is the mole fraction of component 1 (NC12) in Liquid 1 along the phase boundary\nplt.plot(l1ve.y, l1ve.T, label='Vapour composition') # l1ve.y is the mole fraction of component 1 (NC12) in Vapour along the phase boundary\n\n# ... etc ...\n```\n\nIf an equilibrium is not found, for example there is only one vapour-liquid equilibria, and no liquid-liquid equilibria,\nthe arrays corresponding to the non-existent equilibria are empty, i.e.\n```\nT = 300\npxy = get_binary_pxy(T) # Some mixture that has only one vapour - liquid equilibria at 300 K\nprint(len(pxy.lle.x1) == 0) # True\nprint(len(pxy.lle.x2) == 0) # True\nprint(len(pxy.lle.p) == 0) # True\nprint(len(pxy.l1ve.x) == 0) # False\nprint(len(pxy.l1ve.y) == 0) # False\nprint(len(pxy.l1ve.p) == 0) # False\nprint(len(pxy.l2ve.x) == 0) # True\nprint(len(pxy.l2ve.y) == 0) # True\nprint(len(pxy.l2ve.p) == 0) # True\n```\n\n### Dew- and bubble points\n\nWe can also compute the bubble-temperature, pressure etc. directly using the methods `bubble_temperature(p, z)`, `bubble_pressure(T, z)`, `dew_temperature(p, z)` and `dew_pressure(T, z)`, where `z` is the composition of the mixture, as\n\n```Python\neos = cubic('CO2,C1', 'SRK')\nx = [0.5, 0.5] # Total composition of the mixture\np_dew, y_dew = eos.dew_pressure(250, x) # Calculates dew pressure and dew composition at 250 K\nT_dew, y_dew = eos.dew_temperature(1e5, x) # Calculates dew temperature and dew composition at 1 bar\np_bub, x_bub = eos.bubble_pressure(230, x) # Calculates bubble pressure and bubble composition at 230 K\nT_bub, x_bub = eos.bubble_temperature(1e5, x) # Calculates bubble temperature and bubble composition at 1 bar\n```\n\n## Isolines\n\nVarious isolines can be computed using the methods `get_isotherm`, `get_isobar`, `get_isentrope` and `get_isenthalp`. In the following code snippet, the default values of the keyword arguments are indicated.\n\n```Python\nfrom thermopack.pcsaft import pcsaft\neos = pcsaft('NC6,NC12')\nx = [0.2, 0.8]\n\n# Calculate pressure, specific volume, specific entropy and specific enthalpy along the isotherm at 300 K\n# from p = minimum_pressure to p = maximum_pressure. Compute at most nmax points.\np_iso_T, v_iso_T, s_iso_T, h_iso_T = eos.get_isotherm(300, x, minimum_pressure=1e5, maximum_pressure=1.5e7, nmax=100)\n\n# Calculate temperature, specific volume, specific entropy and specific enthalpy along the isobar at 1 bar\n# from T = minimum_temperature to T = maximum_temperature. Compute at most nmax points.\nT_iso_p, v_iso_p, s_iso_p, h_iso_p = eos.get_isobar(1e5, x, minimum_temperature=200, maximum_temperature=500, nmax=100)\n\n# Calculate temperature, pressure, specific volume and specific entropy along the isenthalp at 1 kJ / mol\n# Start at the upper of (minimum_pressure, minimum_temperature)\n# End at the lower of (maximum_pressure, maximum_temperature)\nT_iso_h, p_iso_h, v_iso_h, s_iso_h = eos.get_isenthalp(1e3, x, minimum_pressure=1e5, maximum_pressure=1.5e7,\n                                                            minimum_temperature=200, maximum_temperature=500,\n                                                            nmax=100)\n\n# Calculate temperature, pressure, specific volume and specific enthalpy along the isentrope at 5 J / mol K\n# Start at the upper of (minimum_pressure, minimum_temperature)\n# End at the lower of (maximum_pressure, maximum_temperature)\nT_iso_s, p_iso_s, v_iso_s, h_iso_s = eos.get_isentrope(5, x, minimum_pressure=1e5, maximum_pressure=1.5e7,\n                                                            minimum_temperature=200, maximum_temperature=500,\n                                                            nmax=100)\n```\n\n## Critical point\n\nThermopack has a critical point solver, which is called as\n\n```Python\neos = saftvrqmie('HE,NE') # Use FH-corrected Mie potentials for Helium calculations!\nn = [5, 10]\nTc, Vc, pc = eos.critical(n) # Compute the critical temperature, pressure and volume given mole numbers\nvc = Vc / sum(n) # Critical specific volume computed from critical volume and mole numbers.\n```\n\nThe solver accepts initial guesses for the critical values through the `kwargs` `temp`, and `v`. The error tolerance can be set via the `tol` `kwarg` (default is `tol=1e-7`).\n\n\n\n# More advanced usage\n\n## Interaction parameters\n\nIn thermopack we're able to both set and get a wide array of coefficients and parameters depending on the models we are utilizing. \n\n### Cubic equations of state\n#### Setting and getting the attractive energy interaction parameter $k_{ij}$ and co-volume interaction parameter $l_{ij}$\nStarting with the attractive energy interaction parameter (kij). The parameter can be set using the function `set_kij` after initialising the equation and state. The function requires that you first write in the number of the components and subsequently the new interaction parameter i.e. (component number 1, component number 2, new kij value). If we're curious as to what parameter the EOS is already using we can see this by using the function `get_kij` which returns the value as a float given the component numbers as input i.e. (component number 1, component number 2).\n```Python\ncs = cubic('CO2,N2',\"SRK\",\"Classic\",\"Classic\")\n#We set the interaction parameter to be -0.032\ncs.set_kij(1,2,-0.032)\n#We want to see what the interaction parameter is which returns that kij = -0.032\nkij = cs.get_kij(1,2)\n```\nThe procedure for setting and getting co-volume interaction parameters is analogous to the getting and setting of attractive energy parameters. Simply use the functions `set_lij` and `get_lij` instead.\n```Python\n#We set the parameter to be -0.032\ncs.set_lij(1,2,-0.032)\n#We want to see what the parameter is which returns that lij = -0.032\nlij = cs.get_lij(1,2)\n```\n\n## Tuning Cubics\nCubic Equations of state implemented in ThermoPack can be accessed through the generic [`cubic` class](https://thermotools.github.io/thermopack/vcurrent/cubic_methods.html).\nThis class also offers a variety of methods to tune the alpha-function, mixing rules etc. See the [documentation for \nthe `cubic` class](https://thermotools.github.io/thermopack/vcurrent/cubic_methods.html) for more information.\n\n## The different property interfaces (TV-) (Tp-) and (TVp-)\n\nProperty calculations in ThermoPack can be done either through the [TV-interfaces](thermo_methods.html#tv-property-interfaces), the [Tp-interfaces](thermo_methods.html#tp-property-interfaces) or the [TVp-interfaces](thermo_methods.html#tvp-property-interfaces).\n\nThe difference between the TV- and Tp- interface is only what variables the properties are computed as functions of, and what variables are held constant in the derivatives. TV-interface methods compute properties as functions of $(T, V, n)$, while Tp-interface methods compute properties as functions of $(T, p, n)$. \n\nThe **TVp-interface** methods on the other hand take $(T, V, n)$ as arguments, and evaluate derivatives **as functions of $(T, p, n)$**. To demonstrate with an example:\n\n```Python\nimport numpy as np\nfrom thermopack.cubic import cubic\n\neos = cubic('O2,N2', 'PR') # PR EoS for O2/N2 mixture\n\nT = 300 # Kelvin\np = 1e5 # Pascal\nx = np.array([0.21, 0.79]) # Molar composition (of air)\nn_tot = 10 # Total number of moles\nn = n_tot * x # Vector of mole numbers\n\nv, = eos.specific_volume(T, p, x, eos.VAPPH) # Compute specific volume of vapour phase\nV = v * n_tot # Total volume\n\n\n# Computing the TOTAL Enthalpy (J), given (T, V, n)\n# The differentials are computed for H = H(T, V, n), with \n# \"subscripts\" indicating the variables held constant\nH_tvn, dHdT_Vn, dHdn_TV = eos.enthalpy_tv(T, V, n, dhdt=True, dhdn=True) \n\n# Computing the SPECIFIC VAPOUR phase enthalpy (J / mol), given (T, p, n) \n# The differentials are computed for h_vap = h_vap(T, p, n), with the \n# \"subscripts\" indicating the variables held constant\nh_vap_tpn, dh_vap_dt_pn, dh_vap_dn_Tp = eos.enthalpy(T, p, n, eos.VAPPH, dhdt=True, dhdn=True)\n\n# Computing the SPECIFIC LIQUID phase enthalpy (J / mol), given (T, p, n) \n# The differentials are computed for h_liq = h_liq(T, p, n), with the \n# \"subscripts\" indicating the variables held constant\nh_liq_tpn, dh_liq_dt_pn, dh_liq_dn_Tp = eos.enthalpy(T, p, n, eos.LIQPH, dhdt=True, dhdn=True)\n\n# Computing the TOTAL Enthalpy (J), given (T, V, n)\n# NOTE : The differentials are computed for H = H(T, p, n)\n#        NOT for H = H(T, V, n)\nH_tpn, dHdt_pn, dHdn_Tp = eos.enthalpy_tvp(T, V, n, dhdt=True, dhdn=True)\n```\n\nBesides `enthalpy_tvp`, there are currently available TVp-interfaces for `entropy_tvp` and `thermo_tvp` (logarithm of fugacity coefficients).\n\n\n# Adding new fluids\n\nThe fluid database consists of a set of\n`.json`-files in the\n`fluids` directory. These files are\nare used to auto-generate the FORTRAN-files\n`compdatadb.f90` and\n`saftvrmie_datadb.f90` by running\nthe respective python scripts\n`compdata.py` and\n`saftvrmie.py` found in the\ndirectory `addon/pyUtils/datadb/`.\nThe files are generated in the current working directory and must be\ncopied to the `src`-directory\nbefore recompiling ThermoPack to make the fluids available.\n\nA `\u003cfluid\\\u003e.json` file must\ncontain a minimal set of data to be valid. This includes the critical\npoint, accentric factor, mole weight and ideal gas heat capacity.\n\n## Ideal gas heat capacity\n\nSeveral different correlations for the heat capacity are available,\nselected by the \"correlation\"-key in the \"ideal-heat-capacity-1\" field\nof the fluid files. These are summarized in the table below.\n\n\n```\nIdeal gas heat capacity correlations, and the corresponding keys used in the fluid-database.\n```\n\n| Key | Correlation                         | Equation                                                            | Unit                  |\n|-----|-------------------------------------|---------------------------------------------------------------|-----------------------|\n| 1   | Sherwood, Reid \u0026 Prausnitz(a)       | $A + BT + CT^2 + DT^3$                                        | $\\text{cal mol}^{-1} \\rm{K}^{-1}$ |\n| 2   | API-Project                         | 44                                                                  | -                     |\n| 3   | Hypothetic components               | -                                                                   | -                     |\n| 4   | Sherwood, Reid \u0026 Prausnitz(b)       | $A + BT + CT^2 + DT^3$                                        | $\\rm{J mol}^{-1} \\rm{K}^{-1}$       |\n| 5   | Ici (Krister Strøm)                | $A + BT + CT^2 + DT^3 + ET^{-2}$                                | $\\rm{J g}^{-1} \\rm{K}^{-1}$         |\n| 6   | Chen, Bender (Petter Nekså)         | $A + BT + CT^2 + DT^3 + ET^4$                                 | $\\rm{J g}^{-1} \\rm{K}^{-1}$     |\n| 7   | Aiche, Daubert \u0026 Danner(c)          | $A + B [ (C / T) \\sinh(C/T) ]^2 + D [ (E / T) \\cosh(E / T) ]^2$ |  $\\rm{J kmol}^{-1} \\rm{K}^{-1}$      |\n| 8   | Poling, Prausnitz \u0026 O’Connel(d)     | $R ( A + BT + CT^2 + DT^3 + ET^4 )$                           |  $\\rm{J mol}^{-1} \\rm{K}^{-1}$       |\n| 9   | Linear function and fraction       | $A + BT + C(T + D)^{-1}$                                             |  $\\rm{J mol}^{-1} \\rm{K}^{-1}$       |\n| 10  | Leachman \u0026 Valenta for H2           | -                                                                   | -                     |\n| 11  | Use TREND model                     | -                                                                   | -                     |\n| 12  | Shomate equation $^{(*)}$                   | $A + B T_{\\rm{s}} + C T_{\\rm{s}}^2 + D T_{\\rm{s}}^3 + E T_{\\rm{s}}^{-2}$                        |  $\\rm{J mol}^{-1} \\rm{K}^{-1}$       |\n| 13  | Einstein equation sum                | $R (A + \\sum_i B_i (C_i / T)^2 \\exp[C_i / T] / (\\exp[C_i / T] - 1)^2)$ | $\\rm{J mol}^{-1} \\rm{K}^{-1}$  |\n\n\n(a)3rd ed.(c)DIPPR-database\n\n(b)4th ed.(d)5th ed.\n\n${(*)}$ Note:$T_{\\rm{s}}= 10^{-3} T$\n\n\n## Melting and sublimation curve correlations\n\n$T_{\\rm{reducing}} (K), p_{\\rm{reducing}} (Pa), \\mathbf{a}, \\mathbf{c}, n, n_1, n_2$ and $n_3$ are read from the `\u003cfluid\\\u003e.json` file, while $n_4 = n-n_1- n_2-n_3$. Currently  a maximum of 6 parameters can be given, $n \\leq 6$. The correlation type is defined by a four character string with the format **XX-X**, where **ML-X** and **SL-X** are the default melting curve ($\\sigma_{\\rm{melt}}$) and sublimation curve ($\\sigma_{\\rm{sub}}$) correlations, respectively. See the `Methane.json` file for an working example of both the *melting_curve* and *sublimation_curve* parameters.\n\nThe reduced temperature used in the correlations is  defined as\n\n$$ \\tau = \\frac{T}{T_{\\rm{reducing}}}. $$\n\nThe last character in the correlation string defines how the reducing pressure combines with $\\sigma$ to give the melting/sublimation pressure,\n\n$$\np(\\sigma) = p_{\\rm{reducing}} \\times\n\\begin{cases} \n\\sigma \u0026 \\text{correlation is XX-1} \\\\\\\\\n\\exp(\\sigma)  \u0026 \\text{correlation is XX-2}\\\\\\\\\n\\exp(\\frac{\\sigma}{\\tau})  \u0026 \\text{correlation is XX-3}\n\\end{cases}\n$$\n\nFor the melting curve calculation $\\sigma$ is calculated from\n\n$$ \\sigma_{\\rm{melt}} = \\sum_{i=1}^{n_1} a_i \\tau^{c_i}  + \\sum_{j=1}^{n_2} a_j (\\tau-1)^{c_j} + \\sum_{k=1}^{n_3} a_k (\\ln \\tau)^{c_k} + \\sum_{l=1}^{n_4} a_l (\\tau^{c_l} - 1)  $$\n\nFor the sublimation curve calculation $\\sigma$ is calculated from\n\n$$ \\sigma_{\\rm{sub}} = \\sum_{i=1}^{n_1} a_i \\tau^{c_i}  + \\sum_{j=1}^{n_2} a_j (1-\\tau)^{c_j} + \\sum_{k=1}^{n_3} a_k (\\ln \\tau)^{c_k} + \\sum_{l=1}^{n_4} a_l (\\tau^{c_l} - 1)  $$\n\nThe melting/sublimation curves can be scaled to match the saturation pressure at the triple temperature, $p_{\\rm{sat}}(T_{\\rm{triple}})$. The scaled pressure, $\\tilde{p}(\\sigma)$, is then calculated as\n\n$$ \\tilde{p}(\\sigma) = \\frac{p_{\\rm{sat}}(T_{\\rm{triple}}) }{p(\\sigma(T_{\\rm{triple}}))} p(\\sigma)$$\n\n\n# Component identifiers\n\n\n\u003c!---\nThis is an auto-generated file, written by the module at addon/pyUtils/compdatadb.py\nGenerated at : 2024-02-19T15:48:32.012730\nThis is the same module that is used to generate the Fortran\ncomponent database files.\n---\u003e\n\n\n# Fluid name to fluid identifier mapping\n\u0026nbsp;\n\nIn order to specify fluids in Thermopack you need to use fluid identifiers as shown in the table below. The 'SAFT-VR', 'PC-SAFT' and 'CPA' columns indicate which fluids SAFT-EoS and CPA parameters are available for.\n\n\u0026nbsp;\nYou may have to scroll right to view the whole table.\n\n| Fluid name | CAS Number |Fluid identifyer | SAFT-VR | PC-SAFT | CPA |\n| ------------------------ | ---- | ----------- | ---- | ---- | ---- |\n| 1,1,1,2-Tetrafluoroethane | 811-97-2 | R134a |   |   |   |\n| 1,1,1-Trifluoroethane | 420-46-2 | R143a |   |   |   |\n| 1,1-Difluoroethane | 75-37-6 | R152a |   |   |   |\n| 1,1-Difluoroethylene | 75-38-7 | R1132a |   |   |   |\n| 1,2-Dichlorotetrafluoroethane | 76-14-2 | R114 |   |   |   |\n| 1,3-Butadiene | 106-99-0 | 13BD |   |   |   |\n| 1-Butanol | 71-36-3 | BUT1OL |   | \u0026#10004; | \u0026#10004; |\n| 1-Chloro-1,1,2,2-tetrafluoroethane | 354-25-6 | R124a |   |   |   |\n| 1-Chloro-1,1-difluoroethane | 75-68-3 | R142b |   |   |   |\n| 1-Hexanol | 111-27-3 | HEX1OL |   | \u0026#10004; | \u0026#10004; |\n| 1-Pentanol | 71-41-0 | PENT1OL |   | \u0026#10004; | \u0026#10004; |\n| 1-Propanol | 71-23-8 | PROP1OL |   | \u0026#10004; | \u0026#10004; |\n| 2,3,3,3-Tetrafluoropropene |  754-12-1 | R1234yf |   |   |   |\n| 2-Chloro-1,1,1,2-tetrafluoroethane | 2837-89-0 | R124 |   |   |   |\n| 2-Methylhexane | 591-76-4 | 2MHX |   |   |   |\n| 3-Methylpentane | 96-14-0 | 3MP |   |   |   |\n| Acetone | 67-64-1 | ACETONE |   | \u0026#10004; |   |\n| Acetylene | 74-86-2 | ACETYLENE |   | \u0026#10004; |   |\n| Ammonia | 7664-41-7 | NH3 | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| Argon | 7440-37-1 | AR | \u0026#10004; | \u0026#10004; |   |\n| Benzene | 71-43-2 | BENZENE |   | \u0026#10004; |   |\n| Butanal | 123-72-8 | BUTANAL |   | \u0026#10004; |   |\n| Carbon dioxide | 124-38-9 | CO2 | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| Carbon monoxide | 630-08-0 | CO |   |   |   |\n| Carbon tetrafluoride | 75-73-0 | R14 |   |   |   |\n| Chlorine | 7782-50-5 | CL2 |   | \u0026#10004; |   |\n| Chlorodifluoromethane | 75-45-6 | R22 |   |   |   |\n| Chloropentafluoroethane | 76-15-3 | R115 |   |   |   |\n| Chlorotrifluoromethane | 75-72-9 | R13 |   |   |   |\n| Chlorotrifluorosilane | 14049-36-6 | ClF3Si |   |   |   |\n| Cyclohexane | 110-82-7 | CYCLOHEX |   | \u0026#10004; |   |\n| Cyclopropane | 75-19-4 | C3_1 |   |   |   |\n| Deuterium | 7782-39-0 | D2 | \u0026#10004; |   |   |\n| Di-methyl ether | 115-10-6 | DME |   | \u0026#10004; |   |\n| Di-n-hexyl ether | 112-58-3 | S434 |   |   |   |\n| Dichlorodifluoromethane | 75-71-8 | R12 |   |   |   |\n| Dichlorofluoromethane | 75-43-4 | R21 |   |   |   |\n| Difluoromethane | 75-10-5 | R32 |   |   |   |\n| Dinitrogen tetroxide | 10544-72-6 | N2O4 |   |   |   |\n| Equilibrium-hydrogen | 1333-74-0 | E-H2 |   |   |   |\n| Ethane | 74-84-0 | C2 | \u0026#10004; | \u0026#10004; |   |\n| Ethanol | 64-17-5 | ETOH | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| Ethylbenzene | 100-41-4 | EBZN |   |   |   |\n| Ethylene glycol | 107-21-1 | MEG |   |   |   |\n| Ethylene | 74-85-1 | C2_1 |   | \u0026#10004; |   |\n| Helium-4 | 7440-59-7 | HE | \u0026#10004; |   |   |\n| Hexafluoroethane | 76-16-4 | R116 |   |   |   |\n| Hydrazine | 302-01-2 | N2H4 | \u0026#10004; |   |   |\n| Hydrogen peroxide | 7722-84-1 | H2O2 |   |   |   |\n| Hydrogen sulfide | 7783-06-4 | H2S | \u0026#10004; | \u0026#10004; |   |\n| Hydrogen | 1333-74-0 | H2 | \u0026#10004; |   |   |\n| Isobutane | 75-28-5 | IC4 |   | \u0026#10004; |   |\n| Isopentane | 78-78-4 | IC5 |   | \u0026#10004; |   |\n| Krypton | 7439-90-9 | KR | \u0026#10004; | \u0026#10004; |   |\n| Lennard-jones_fluid |  | LJF | \u0026#10004; |   |   |\n| Methane | 74-82-8 | C1 | \u0026#10004; | \u0026#10004; |   |\n| Methanol | 67-56-1 | MEOH | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| Methyl fluoride | 593-53-3 | R41 |   |   |   |\n| Methylcyclopentane | 96-37-7 | MTC5 |   |   |   |\n| Neon | 7440-01-9 | NE | \u0026#10004; |   |   |\n| Nitric oxide | 10102-43-9 | NO |   |   |   |\n| Nitrogen | 7727-37-9 | N2 | \u0026#10004; | \u0026#10004; |   |\n| Nitrous oxide | 10024-97-2 | N2O |   |   |   |\n| Octafluoropropane | 76-19-7 | R218 |   |   |   |\n| Ortho-hydrogen | 1333-74-0 | O-H2 | \u0026#10004; |   |   |\n| Oxygen | 7782-44-7 | O2 | \u0026#10004; | \u0026#10004; |   |\n| Para-hydrogen | 1333-74-0 | P-H2 | \u0026#10004; |   |   |\n| Pentafluoroethane | 354-33-6 | R125 |   |   |   |\n| Propadiene | 463-49-0 | ALLENE |   |   |   |\n| Propane | 74-98-6 | C3 | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| Propylene | 115-07-1 | PRLN |   |   |   |\n| Pseudo | XXX | PSEUDO |   |   |   |\n| Sulfur dioxide | 7446-09-5 | SO2 |   |   |   |\n| Sulfur hexafluoride | 2551-62-4 | F6S |   |   |   |\n| Tetrafluoroethylene | 116-14-3 | R1114 |   |   |   |\n| Tetrafluorohydrazine | 10036-47-2 | F4N2 |   |   |   |\n| Toluene | 108-88-3 | TOLU |   | \u0026#10004; |   |\n| Trans-1,3,3,3-tetrafluoropropene | 29118-24-9 | R1234ze |   |   |   |\n| Trichlorofluoromethane | 75-69-4 | R11 |   |   |   |\n| Trifluoroamine oxide | 13847-65-9 | F3NO |   |   |   |\n| Trifluoromethane | 75-46-7 | R23 |   |   |   |\n| Water | 7732-18 | H2O | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| Xenon | 7440-63-3 | XE | \u0026#10004; |   |   |\n| m-Xylene | 108-38-3 | MXYL |   |   |   |\n| n-Butane | 106-97-8 | NC4 | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| n-Decane | 124-18-5 | NC10 | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| n-Docosane | 629-97-0 | NC22 | \u0026#10004; | \u0026#10004; |   |\n| n-Dodecane | 112-40-3 | NC12 |   | \u0026#10004; |   |\n| n-Eicosane | 112-95-8 | NC20 | \u0026#10004; | \u0026#10004; |   |\n| n-Heneicosane | 629-94-7 | NC21 |   | \u0026#10004; |   |\n| n-Heptadecane | 629-78-7 | NC17 |   | \u0026#10004; |   |\n| n-Heptane | 142-82-5 | NC7 | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| n-Hexadecane | 544-76-3 | NC16 |   | \u0026#10004; |   |\n| n-Hexane | 110-54-3 | NC6 | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| n-Hydrogen | 1333-74-0 | N-H2 |   |   |   |\n| n-Nonadecane | 629-92-5 | NC19 |   | \u0026#10004; |   |\n| n-Nonane | 111-84-2 | NC9 | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| n-Octadecane | 593-45-3 | NC18 |   | \u0026#10004; |   |\n| n-Octane | 111-65-9 | NC8 | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| n-Pentacosane | 629-99-2 | NC25 |   | \u0026#10004; |   |\n| n-Pentadecane | 629-62-9 | NC15 | \u0026#10004; | \u0026#10004; |   |\n| n-Pentan | 109-66-0 | NC5 | \u0026#10004; | \u0026#10004; | \u0026#10004; |\n| n-Tetracosane | 646-31-1 | NC24 |   | \u0026#10004; |   |\n| n-Tetradecane | 629-59-4 | NC14 |   | \u0026#10004; |   |\n| n-Tricosane | 638-67-5 | NC23 |   | \u0026#10004; |   |\n| n-Tridecane | 629-50-5 | NC13 |   | \u0026#10004; |   |\n| n-Undecane | 1120-21-4 | NC11 |   | \u0026#10004; |   |\n| o-Xylene | 95-47-6 | OXYL |   |   |   |\n| p-Xylene | 106-42-3 | PXYL |   |   |   |\n\n\n","funding_links":[],"readme_doi_urls":["https://doi.org/10.1021/acs.iecr.7b00317","https://doi.org/10.1016/j.fluid.2020.112790","https://doi.org/10.1063/1.5111364","https://doi.org/10.1063/1.5136079","https://doi.org/10.1063/1.5142771","https://doi.org/10.1016/j.fluid.2017.02.006","https://doi.org/10.1016/j.ijggc.2021.103361","https://doi.org/10.1016/j.ijggc.2016.07.004","https://doi.org/10.1016/j.fluid.2016.12.018","https://doi.org/10.1016/j.jlp.2018.06.001","https://doi.org/10.1063/5.0082690","https://doi.org/10.1080/00268976.2019.1664780"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["thermodynamics"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/303761","html_url":"https://ost.ecosyste.ms/projects/303761"}